3.13.2008

System Loading .. GetIdleTime

DWORD GetIdleTime (void);
CE 提供一個function call : GetIdleTime( ),用來取得系統啟動到目前,idle tick的總數。
配合 GetTickTime( ) 可以來算system cpu loading。

MSDN 的說明有reference code:
dwStartTick = GetTickCount();
dwIdleSt = GetIdleTime();
// Insert a call to the Sleep(sleep_time) function to allow idle time
// to accrue. An example of an appropriate sleep time is 1000 ms.
dwStopTick = GetTickCount();
dwIdleEd = GetIdleTime();
PercentIdle = ((100*(dwIdleEd - dwIdleSt)) / (dwStopTick - dwStartTick));
.. 就是算出這段時間的system tick和idle tick,然後算百分比。

根據msdn的說明,GetIdleTime( )需要OAL 的配合,OAL必須要mantain 三個kernel變數,宣告在 oal_nkxp.h
extern volatile UINT32 curridlehigh;
extern volatile UINT32 curridlelow;
extern UINT32 idleconv;
實際BSP在 OEMIdle( )中 update curridlelow, curridlehigh 這兩個variable。

其實 curridlehigh, low 剛好是 return value 的high word 和low word。
return value 是DWORD。

而在OEMIdle( )中,就是算出idle的tick數,累計到 curridlehigh/low。

-- 困難在計算 idle 的tick數 ==> 算出可以idle的tick數,設定timer,然後讓cpu進入idle......等timer timeup...

沒有留言: