新聞中心

EEPW首頁 > 模擬技術 > 設計應用 > 移動嵌入式WinCE電源管理應對有技巧

移動嵌入式WinCE電源管理應對有技巧

作者: 時間:2011-03-16 來源:網(wǎng)絡 收藏

伴隨著移動嵌入式產(chǎn)品的普及,電源管理已經(jīng)成為重要技術指標和產(chǎn)品的有機組成。典型移動嵌入式設備對能耗越來越敏感,電源管理技術正成為產(chǎn)品設計的關鍵所在。為了應對電源管理面臨的挑戰(zhàn),如何設計出高效的嵌入式系統(tǒng)的電源管理已成為研究熱點。

典型移動嵌入式系統(tǒng)能耗主要部件包括嵌入式微處理器CPU、內存、LCD及背光、電源轉換部件、DSP、外設控制器等。在這些元件中,有些元件能耗固定,有些元件可在不同時間段工作并有多種可控的耗能狀態(tài),后者的有效使用成為嵌入式系統(tǒng)節(jié)能的關鍵所在。

1.什么是WinCE電源管理

(1)電源管理概念與方法

在電池供電的移動嵌入式系統(tǒng)中,一般采用高效率的電源芯片用于供電管理,或采用大容量的電池以解決能耗需求,但這兩種技術的發(fā)展還無法滿足移動嵌入式設備的動態(tài)功耗和靜態(tài)功耗。有一種方法可以協(xié)調高性能與低功耗之間的矛盾,就是根據(jù)系統(tǒng)負載進行性能調節(jié),通過停止某些模塊的時鐘和電源供應將能耗降至最低。

嵌入式系統(tǒng)按功率消耗由小到大分為睡眠(sleep)、空閑(idle)、運行(Run)等模式。大多時間內,在運行態(tài)(Run)時設備全部正常工作,而在睡眠與空閑模式時處理器則可以按照特定的模式進行相應的節(jié)能。因此,電源管理的目的是節(jié)能,基本節(jié)能方法是使系統(tǒng)適時的進出休眠狀態(tài)。在節(jié)能狀態(tài)下處理器掛起,主存儲器運行在節(jié)能的自刷新模式,只有功耗管理電路、喚醒電路繼續(xù)工作。比如用戶按下On/Off按鈕,或者監(jiān)視用戶活動的定時器超時,或者應用程序API都可以使得嵌入式系統(tǒng)休眠,當用戶再次按下On/Off或者有其他喚醒中斷發(fā)生時,系統(tǒng)就會退出休眠。因此,電源管理模塊和用戶活動情況密不可分,電源管理是用戶活動所驅動的。

WinCE處理用戶與系統(tǒng)交互的部分是GWES,所以早期電源管理工作也是由GWES來實現(xiàn)。但GWES提供的電源管理模塊功能過于粗糙死板,所有子設備只能有On和Suspend狀態(tài),應用程序無法得到任何狀態(tài)轉換通知。后來,WinCE引入了電源管理PM(Power Manager)模塊,用以替代GWES中的電源管理功能,新的電源管理模塊提供更完整和靈活的功能,如子設備電源狀態(tài)可以單獨設定,應用可以獲得電源通知等。因此,電源管理器負責管理設備電源,并且與不支持電源管理功能的設備和應用兼容,在內核OAL層、設備驅動程序和應用程序之間充當中間人角色。

(2)電源管理器結構

在使用電池供電的WinCE系統(tǒng)中,正確設計電源管理十分關鍵。在功能上大致可以分為系統(tǒng)級電源管理、動態(tài)電源管理、設備電源管理等三類。通常,應用程序在大多數(shù)時間都不需要關注WinCE 設備的電源損耗,但是在某些時候要注意這些損耗。WinCE電源管理器通過一個名為Pm.dll的動態(tài)鏈接庫與設備管理器Device.exe鏈接。Pm.dll動態(tài)鏈接庫支持三類接口:一是驅動程序接口:為需要進行電源管理的設備的驅動程序使用;二是應用程序接口:為需要利用電源管理的應用程序使用;三是提醒接口(Notification):為需要接受電源事件提醒的應用程序使用。

例如,WinCE系統(tǒng)先檢查任務負載情況,如果沒有需要運行的任務,則一般進入空閑節(jié)能狀態(tài)等待喚醒,在空閑一段時間后進入深度睡眠,掛起到RAM中或者硬盤上。在運行任務期間,WinCE還可以利用硬件提供的電源管理功能動態(tài)調節(jié)芯片運行電壓和頻率,對系統(tǒng)進行更加細致的電源管理。

2.WinCE電源管理的分類

(1)系統(tǒng)電源狀態(tài)

Win CE系統(tǒng)電源狀態(tài)更多的是代表系統(tǒng)電源的一種配置方案,它是各個子設備電源配置的集合。它設定一種可能出現(xiàn)的情景,事先擬定了此情景下電力分配策略(哪些子設備打開,哪些子設備關閉)。WinCE支持以下幾種電源狀態(tài):①ON狀態(tài),用戶在主動使用設備。②UserIdle狀態(tài),用戶與設備停止交互,但仍有可能使用設備。③SystemIdle狀態(tài),在經(jīng)過一段時間的UserIdle后進入此狀態(tài),但是驅動和系統(tǒng)仍然活動。④Suspend狀態(tài),當驅動程序和系統(tǒng)進程不再與系統(tǒng)交互時進入此狀態(tài)。⑤ColdReboot和Reboot狀態(tài),冷啟動后系統(tǒng)電源狀態(tài)。

因此,在這個基礎上技術人員可以根據(jù)自己的平臺特點,增加新的策略來滿足不同移動嵌入式產(chǎn)品的需要。常見的做法是設計一個電源按鍵的流驅動,當檢測到按鍵時候呼叫API將系統(tǒng)電源轉換到Suspend,如On/Off按鍵。還有就是加入背燈控制,比如在On狀態(tài)下請求顯示驅動打開背燈,在UserIdle和SystemIdle狀態(tài)下請求顯示驅動關閉背燈。

(2)設備電源管理

WinCE加入了高級的電源管理組件功能,它允許每個外設具有自己的電源狀態(tài),這有別于一般的系統(tǒng)電源狀態(tài)(System Power State),故被稱作設備電源狀態(tài)(Device Power State)?,F(xiàn)在的應用程序一般都有能力設置個別外設的電源狀態(tài),比如一個文件傳輸程序,在保持串口或者藍牙端口正常通訊時,可以關閉led/' target='_blank'>顯示屏幕和背光,這就為實現(xiàn)更高級別的動態(tài)電源管理提供了可能。

電源管理器和支持電源管理的設備之間的交互包括兩種機制:一是電源管理器到驅動程序,電源管理器使用DeviceIoControl()函數(shù)向設備驅動程序發(fā)送I/O控制(IOCTLs),因此設備必須能響應電源管理器的查詢、狀態(tài)設置等IOCTLs。二是驅動程序到電源管理器,驅動程序使用DevicePower Notify()函數(shù)與電源管理器交互,例如請求電源管理器把它的設備置于某種狀態(tài),如果電源管理器接受該請求則通過發(fā)送IOCTL_POWER_SET等IOCTLS來進行設置。

(3)應用程序與電源管理器交互

Win CE應用程序與電源管理器有兩種交互機制:一是應用程序接口,用以獲取當前系統(tǒng)和設備的電源狀態(tài)。應用程序通過SetSystemPowerState()來設置系統(tǒng)電源狀態(tài),通過SetDevicePower來設置子設備電源狀態(tài),通過SetPowerRequirement通知電源管理器將子設備設置在特殊電源狀態(tài)下,不隨系統(tǒng)電源改變。二是電源事件提醒接口。為了實現(xiàn)提醒接口,應用程序還可通過CreateMsgqueue()函數(shù)建立消息隊列,將其句柄傳給電源管理器,電源管理器再把提醒發(fā)送到消息隊列中,調用者可選擇可用提醒的一個子集進行響應。

(4)OAL層電源管理的實現(xiàn)

OEM Adaptation Layer(OAL)是一層與硬件平臺相關的代碼,它在電源狀態(tài)轉換中扮演著重要的角色。在WinCE中,OAL層電源管理通過OEMIdle()和OEMPowerOff()函數(shù)實現(xiàn)。其中OEMInit是初次上電時(或在冷啟后)被調用,如初始化系統(tǒng)內存,建立調試環(huán)境,設置系統(tǒng)中斷等;當系統(tǒng)中沒有任何可調度的線程時,內核就調用OEMIdle()以實現(xiàn)降低處理器的頻率來達到省電目的,這個函數(shù)在BSP中可以由OEM修改定制。

當有外部中斷時,CPU可從其中恢復,如當用戶按下OFF按鈕或者應用調用API進入suspend狀態(tài)時候,內核會調用OEMPowerOff()函數(shù),在系統(tǒng)喚醒后繼續(xù)從OEMPowerOff()被掛起處執(zhí)行。OEMPowerOff函數(shù)是基于硬件平臺來實現(xiàn)的,它能進行CPU寄存器保存、設置及喚醒恢復等功能。系統(tǒng)Idle狀態(tài)和前面說的UserIdle狀態(tài)是不同概念,前者是CPU負荷情況驅動,代表系統(tǒng)空閑;后者是用戶活動驅動,代表用戶空閑。

3.從應用程序交互分析電源管理狀態(tài)

當WinCE 系統(tǒng)被掛起,為了省電用戶需要關閉處理器及大部分設備供電,然后在需要喚醒時再通過定時器或無線模塊喚醒。一般來說,被喚醒后系統(tǒng)會返回到與系統(tǒng)掛起前一樣的狀態(tài),因此應用程序根本不知道系統(tǒng)曾被掛起,除非它明確地請求當系統(tǒng)掛起時通知它。因此從應用程序的角度看,電源管理有三種方式:查詢電源狀態(tài)、改變電源狀態(tài)和防止電源狀態(tài)改變。

(1)查詢電源狀態(tài)

對嵌入式系統(tǒng)來說,OEM廠商定義了系統(tǒng)的電源狀態(tài)。例如,電源狀態(tài)可能是打開(On),空閑(Idle)和掛起(Suspend),還有ScreenOff、InCradle和 OnBattery等。從應用程序的觀點看,電源管理程序提供了通知電源狀態(tài)改變的能力以及通過一系列的函數(shù)統(tǒng)一改變電源狀態(tài)的能力。

因此,查詢系統(tǒng)當前的電源狀態(tài)是WinCE的一個重要功能,可以調用DWORD GetSystemPowerStatusEx2(PSYSTEM_


上一頁 1 2 下一頁

評論


相關推薦

技術專區(qū)

關閉