WINCE6.0+2443系统大概过10分钟进入sleep状态
最近在開發基于WINCE6.0+2443的GPS產品的時候,發現我的機器在電池供電的時候,開機之后,如果沒有其他動作,那么大概10分鐘左右,我的系統會進入sleep的狀態,后來發現我在實現電池驅動的時候把函數BatteryPDDGetStatus()下面部分注釋掉了
?memcpy(pstatus,?&gpStatus->sps,?sizeof(*pstatus));
????*pfBatteriesChangedSinceLastCall?=?gpStatus->fChanged;
????if(*pfBatteriesChangedSinceLastCall)?{
????????gpStatus->fChanged?=?FALSE; //?reset?changed?flag?if?it's?set
}
?
為什么注釋了上面這部分代碼就會出現這個問題了,我們來看看電池驅動MDD層BatteryAPIGetSystemPowerStatusEx2()的定義:
?
上圖的第117行用來判斷系統當前狀態是否有AC供電還是電池供電,目前我還沒有完全搞清楚為什么是AC供電的情況下,系統就不會進入sleep,我想是和上圖中調用的BatteryAPIStopwatch()函數有很大的關系。我后來在BatteryPDDGetStatus()函數返回之前加了下面這句:
pstatus->ACLineStatus =AC_LINE_ONLINE;
這樣即使是在電池供電的情況下(這時候,是我做了個假動作來告訴BatteryAPIGetSystemPowerStatusEx2()函數:系統一直是AC供電),這就證明了在AC供電的情況下系統不會進入sleep狀態,但到底是為什么呢?有待于后面去徹底搞清楚了,如果大家知道的,麻煩大家告知。
?
上面提到說加pstatus->ACLineStatus =AC_LINE_ONLINE;這行語句可以不讓系統進入sleep,但對于一個需要電池供電的產品來說是不能這樣解決這個問題的,因為應用程序需要根據pstatus->ACLineStatus來判斷當前是否在充電,以便告訴用戶的充電狀態。后來經過上網查資料和CSDN各位高手的指點,我在BatteryPDDGetStatus()函數返回之前加入了下面的代碼就解決了這個問題:
?
我為什么加了if(NoEnterSleepStatus?>=?50)這個判斷呢,就是不想每次調用(隔5s調用一次)BatteryPDDGetStatus()函數的時候就去執行上面的動作,只要趕在系統進入sleep之間timeout之前調用了上面的代碼就可以阻止系統進入sleep狀態。
?
在這里有個疑問,網上有很多網友說通過定時調用SystemIdleTimerReset()函數也可以阻止系統進入sleep狀態,但我在上面的位置加了下面的代碼后也無法阻止系統進入sleep狀態,很奇怪,希望知者告知,謝謝啊
?
?
?
總結
以上是生活随笔為你收集整理的WINCE6.0+2443系统大概过10分钟进入sleep状态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINCE6.0+S3C2443的RTC
- 下一篇: WINCE屏蔽NK的串口输出信息