DWORD GetIdleTime (void);CE 提供一個function call : GetIdleTime( ),用來取得系統啟動到目前,idle tick的總數。
配合 GetTickTime( ) 可以來算system cpu loading。
MSDN 的說明有reference code:
dwStartTick = GetTickCount();.. 就是算出這段時間的system tick和idle tick,然後算百分比。
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));
根據msdn的說明,GetIdleTime( )需要OAL 的配合,OAL必須要mantain 三個kernel變數,宣告在 oal_nkxp.h
extern volatile UINT32 curridlehigh;實際BSP在 OEMIdle( )中 update curridlelow, curridlehigh 這兩個variable。
extern volatile UINT32 curridlelow;
extern UINT32 idleconv;
其實 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...
沒有留言:
張貼留言