2013年12月18日 星期三

Get system / local time in windows driver

    LARGE_INTEGER CurrentTime;
    LARGE_INTEGER LocalTime;
    TIME_FIELDS   TimeFiled;

    //得到格林威治時間
    KeQuerySystemTime(&CurrentTime);

    //轉換成本地時間
    ExSystemTimeToLocalTime(&CurrentTime, &LocalTime);

    //把時間轉換為容易理解的型式 
    RtlTimeToTimeFields(&LocalTime, &TimeFiled);

    KdPrint(("[TimeTest] NowTime : %4d-%2d-%2d %2d:%2d:%2d",
                     TimeFiled.Year, TimeFiled.Month, TimeFiled.Day,
                     TimeFiled.Hour, TimeFiled.Minute, TimeFiled.Second));

2013年12月3日 星期二

AMD自組桌電12k有找




最新組的桌電...12/1在原價屋買的

 主機板:ASUS-A88XM-A.......................................................................................$2390

 CPU:AMD-6600K 3.9G+HD8570D(Turbo 4.2G)/100W/32nm....................................$3269

 CPU散熱器:True Spirit 90M(Rev.A)導管鍍鎳.鰭片陽極黑化.全系列(高度12.6cm)..$690

 記憶體:JETRAM 4GB DDR3-1600 *2......................................................................$950*2

 硬碟:WD-1TB 64M/7200轉/10EZEX/二年保.............................................................$1940

 機殼:俠客EVO-果綠/顯卡長35cm.風扇高14.5cm/U3內置(轉U2).SSD*2.透側綠化.$850

 電源供應器:CM E-Lite Power 400W/12公分/V2.3....................................................$1250

 總價格:定價12289-優惠389 = $11900


6600K的CP值我覺得相當高,GPU相當於約2k元的顯卡..算一算CPU只剩1k多

參考
http://www.cpubenchmark.net/cpu_list.php

效能感覺都到Intel Core i3-3250等級了...

因為APU好像都會有過熱的問題所以加購了一顆風扇

$1990的技嘉主機板F2A85XM-D3H缺貨...所以加點錢上A88晶片(支援FM2+).雖然以後換CPU的機會不大了,不然價格可能壓到11k以下

會選這個機殼主要是便宜~在透側板機殼中算相當便宜了,而且又支援2組SSD,前後又各有一個風扇

裝了win7 64bit作業系統,跑2k13(預設特效)fps都在60上下...非常的順阿

2013年8月30日 星期五

MFC convert CString to int, int to CString

CString str;
int a;

//CString to int
a = _wtoi(str);

//int to CString
str.Format(TEXT("%d"),a);

replaces tab with spaces in Visual Studio 2012

在VS上的功能表列上選擇

TOOLS->Options->Text Editor->All Languages->Tabs

in the Tab scheme, select Insert spaces instead Keep tabs

2013年7月26日 星期五

compile and port win32 apps on Windows RT (ARM architecture) in VS2012

I'd met a problem when compiling my project in visual studio 2012.

It showed the message below:

error LNK1104: cannot open file 'uafxcwd.lib'

Go updating the windows RT MFC library. Download it from:

https://drive.google.com/folderview?id=0B25hIeyRmniUZzk0c3hNZmVDSms&usp=sharing

Put the .lib files in mfc-winrt.7z to C:\Program Files\Microsoft Visual Studio 11.0\VC\atlmfc\lib\arm

and recompile it

2013年7月18日 星期四

Component Object Model Aggregation Example

CA為outer object, CX為inner object


將CA聚合CX成為單一物件使用

或是直接使用CX物件


//CA.h
#include “CX.h”


class CA:public IA{
private:
   int m_ref;
   CX* m_cx;
public:
   static NTSTATUS CreateInstance(IUnknown** Unknown);
   CA();
void *operator new(size_t s){
       CA  *p = reinterpret_cast<CA*>(ExAllocatePoolWithTag(NonPagedPool, s, 'cdev'));
       if(p) RtlZeroMemory(p, s);
       return p;
   }
   void operator delete(void *p){
       if(p) ExFreePool(p);
       p = NULL;
   }
   NTSTATUS QueryInterface(REFIID iid, void** ppv);
   ULONG AddRef();
   ULONG Release();
};
//------------------------------------------------------------------------

//CA.cpp
#include "CA.h"


NTSTATUS CA::CreateInstance(IUnknown** Unknown){
   CA *p = new CA();
   p->AddRef();
   *Unknown = (IUnknown*)(IA*)p;
   return STATUS_SUCCESS;
}

CA::CA(){
   m_ref = 0;
   m_cx = new CX(this);
}


NTSTATUS CA::QueryInterface(REFIID iid, void** ppv){
   if ((iid==IID_IX) || (iid==IID_IY)){
       m_cx->NonDelegatingQueryInterface(iid,ppv);
return STATUS_SUCCESS;
   }else if (iid == IID_IA){
       *ppv = (IA*)(this);
   }else if (iid == IID_IUnknown){
       *ppv = (IUnknown*)(this);
   }else{
       *ppv = NULL;
       return STATUS_INVALID_PARAMETER;
   }
   ((IUnknown*)*ppv)->AddRef();
   return STATUS_SUCCESS;
}


ULONG CA::AddRef(){
   m_ref++;
   return m_ref;
}


ULONG CA::Release(){
   --m_ref;
   if(m_ref==0)
       delete this;
   return m_ref;
}
//------------------------------------------------------------------------

CX是inner object,也就是被聚合的物件,因此需要實作兩組IUnknown interface:
1組是被聚合時使用的IUnknown
另1組則是未被聚合使用的INonDelegatingUnknown

//CX.h
class CX : public IX, public IY, public IZ, public INonDelegatingUnknown{
private:
PUNKNOWN m_pUnknownOuter; int m_ref;
public:
   static NTSTATUS CreateInstance(IUnknown** Unknown);
CX(IUnknown* pUnknownOuter);
   void *operator new(size_t s){
       CA  *p = reinterpret_cast<CA*>(ExAllocatePoolWithTag(NonPagedPool, s, 'cdev'));
       if(p) RtlZeroMemory(p, s);
       return p;
   }
   void operator delete(void *p){
       if(p) ExFreePool(p);
       p = NULL;
   }

NTSTATUS QueryInterface(REFIID iid, void** ppv); ULONG AddRef(); ULONG Release(); NTSTATUS NonDelegatingQueryInterface(REFIID iid, void** ppv);
ULONG NonDelegatingAddRef(); ULONG NonDelegatingRelease();
}

//------------------------------------------------------------------------

//CX.cpp
#include "CX.h"


NTSTATUS CX::CreateInstance(IUnknown** Unknown, IUnknown* pUnknownOuter){
   CX *p = new CX(pUnknownOuter);
   p->AddRef();
   *Unknown = (IUnknown*)(IX*)p;
   return STATUS_SUCCESS;
}

CX::CX(IUnknown* pUnknownOuter){
m_ref = 0;
if(pUnknownOuter)
m_pUnknownOuter = pUnknownOuter;
else
m_pUnknownOuter = reinterpret_cast<IUnknown*>(static_cast<INonDelegatingUnknown*>(this));
}
//------------------------------------------- // IUnknown //-------------------------------------------
NTSTATUS CX::QueryInterface(REFIID iid, void** ppv){ m_pUnknownOuter ->QueryInterface(iid,ppv); return STATUS_SUCCESS; } ULONG CX::AddRef(){ return m_pUnknownOuter ->AddRef(); } ULONG CX::Release(){ return m_pUnknownOuter ->Release(); }
//------------------------------------------- // INonDelegatingUnknown //------------------------------------------- // ULONG CX::NonDelegatingAddRef(){ m_ref++; return m_ref; } ULONG CX::NonDelegatingRelease(){ m_ref--; if(m_ref==0) delete this; return m_ref; } NTSTATUS CX::NonDelegatingQueryInterface(REFIID iid, void** ppv){ if (iid==IID_IUnknown){ *ppv = (IUnknown*)this; } else if (iid==IX){ *ppv = (IUnknown*)(IX*)this; } else if (iid==IY){ *ppv = (IUnknown*)(IY*)this; }
else if (iid==IZ){ *ppv = (IUnknown*)(IZ*)this; } else{ *ppv= NULL; return STATUS_INVALID_PARAMETER; } ((IUnknown*)*ppv)->AddRef(); return STATUS_SUCCESS; }


//------------------------------------------------------------------------

當需要使用CA聚合CX成為單一物件使用時:
IUnknown* caInf;
IUnknown* ixInf;
IUnknown* iaInf;
IUnknown* izInf;
CA::CreateInstance(&caInf);
caInf->QueryInterface(IID_IX, (void**)&ixInf);//using IX interface(inner object)
ixInf->QueryInterface(IID_IA, (void**)&iaInf);//using IA interface(outer object)
iaInf->QueryInterface(IID_IZ, (void**)&izInf);//cannot using IZ interface(inner object)

直接使用CX物件:
IUnknown* cxInf;
IUnknown* ixInf;
CX::CreateInstance(&cxInf, NULL);
cxInf->QueryInterface(IID_IX, (void**)&ixInf);//using IX interface

2013年6月1日 星期六

軟韌體工程師面試心得

小弟我四大碩畢,主要都是找軟韌體方面的工作

po一下自己的面試經驗給大家參考:

1.聯詠 影像演算法開發工程師(AV)

一剛開始做測驗,英文+人事資料表填寫共約1個小時

英聽的部份我覺得非常的難,二個人dialog然後有2~4題問他們對話的內容,

不然就是唸一段文章,然後問文章的內容...

通常唸到一半我就花掉了..建議還是先把題目稍微掃過一篇

再來聽應該會比較知道在說什麼

接著是專業科目考題30分鐘,主要是以C語言為主

給你一段程式碼,問你執行之後結果是什麼(看printf印什麼)

對指標、call by value、call by reference要了解,bit operation運算,還有一些我看不懂的題目..@@

考完之後有二個面試官一起面試,先叫我自我介紹

然後說他們部門在做些什麼,需要什麼樣的人

有問覺得自己的優點是什麼、覺得自己有沒有抗壓力等等...

我有稍微想了一下,舉當兵的例子給他們聽

主管人蠻好的,面試起來氣氛還ok

但是感覺他們想找比較有經驗的人...

結果:感謝卡(等了二個多禮拜)




2.系微 Window/Linux Utility 軟體工程師

一剛開始先測驗,C語言+英文+邏輯測驗共二個小時...寫到頭好痛="=

C語言也是考指標、bit operation、記憶體位址等等...

然後有考driver、linux開機流程、shell script這部份我就完全不會了

英文+邏測寫起來就順多了,沒有英聽

面試部分,也是問我做了些什麼然後介紹一下這個職缺要做些什麼

有三個月的訓練(試用期?),三個月後做一次評測..沒過可能就掰掰了

有討論C錯誤的地方,問我為什麼這樣寫

最後也有提到薪資的部分,40k有點困難

結果:感謝卡(等了二個多禮拜)




3.瑞昱 音訊軟體開發工程師

先考性向測驗,沒有英文也沒有專業科目測驗讓我有點意外

面試的部分果然跟傳聞一樣要用到白板

主管要我把自己做的東西畫出來

雖然當完一年的兵,不過論文還算是蠻熟的

他問的東西也都盡量作解釋,雖然他不一定聽的懂我在講啥

我覺得有解釋總比愣在那邊好

最後問了一題白板題,我卡了頗久...好險最後有想出來

我有特別為瑞昱做了一份履歷(主要是封面),我想這個應該也有加分吧

結果:口頭offer(等了二天)




4.HTC 募集招募嵌入式系統菁英(主要是做影像方面軟韌體開發)

一剛開始先作英文測驗,英聽部分跟聯詠比起來相對簡單

也有雙人dialog,不過一次只問一個問題

接著是C語言+porting考卷+邏輯測驗

C的部分要考了很多++i和i++這類型的題目

比如x=1 a=5;那
1)x=++a+2;
x,a值各為多少?

porting對我來說非常難,考GPIO、multi thread、IT名詞解釋等

寫得非常零散

邏輯測驗是雙面的,背面的有點難,給你一串數字,要找出這串數字的規則

看其中哪一個數字是多出來的,比如1,3,4,5,7,9那4就是多出來的

接著主管面試,因為我碩班有做過android相關的題目

問了一下後主管就說他那邊ok要直接幫我安排2次面試...

結果:因為有工作就推掉2次面試了




5.新唐科技 電腦產品軟韌體設計工程師

直接面試沒有其他測驗

專業能力幾乎也都是面試的時後直接用問的:比如protect保留字的功能?

有聽過volatile嗎?const的用法等等

這些都是我不太會的=”=

也有問到人生目前遇到最大的挫折是什麼?

也問了許多假設性的問題:

1)假如剩下1個星期要交貨,不過你估計1個月才能完成,那要怎麼辦?

2)假如你老闆建議你使用某個方法完成任務,不過你覺得不可行(之前有類似經驗),你覺得自己的方法比較ok,那你會怎麼做?
(你只能使用其中一個方法,因為時間有限)

3)你覺得什麼樣的事情會讓你想離開一個工作(自己的底限)?

這完全就是臨場發揮了,面試官說他也沒有標準答案@@

講了2個多小時巴....出來之後感覺超累的

結果:無聲卡