劉英,李貴明
(1.深圳大學(xué)物理技術(shù)與科學(xué)學(xué)院,深圳518060;2.中國科學(xué)院合肥物質(zhì)科學(xué)研究院)
隨著嵌入式CPU技術(shù)、大容量微硬盤和高速無線網(wǎng)絡(luò)的發(fā)展,移動嵌入式設(shè)備步入了嶄新的時代,功能越來越多樣化,逐步發(fā)展成為融數(shù)字通信、商務(wù)助理、實(shí)時網(wǎng)絡(luò)于一體的個人助理終端,已成為人們必不可少的隨身助手。但是,CPU的高頻處理、大尺寸顯示屏和觸摸屏、高功率無線射頻都對嵌入式設(shè)備的電源供給帶來了前所未有的挑戰(zhàn)。
各種嵌入式操作系統(tǒng)顯然無法預(yù)期軟硬件技術(shù)發(fā)展對電源管理提出的更高要求。原有嵌入式設(shè)備的電源管理由于沒有過多考慮設(shè)備的移動性能,所以更適合于交流供電的環(huán)境下使用,如廣泛應(yīng)用于數(shù)據(jù)采集、安防監(jiān)控等。移動嵌入式設(shè)備必須充分考慮電池供電所面臨的電源瓶頸,其中的電源管理策略是最切實(shí)際的突破口。依托于移動嵌入式設(shè)備的使用場景,可以在系統(tǒng)電源狀態(tài)劃分、電源狀態(tài)轉(zhuǎn)換邏輯、設(shè)備電源狀態(tài)和系統(tǒng)電源狀態(tài)映射等多個方面進(jìn)行改進(jìn)。實(shí)踐證明,這種改進(jìn)方式在成本上是最節(jié)約的,但實(shí)際效果卻非常理想。
嵌入式移動設(shè)備不同于一般嵌入式設(shè)備之處,在于其不可能經(jīng)常處于CPU全速工作狀態(tài),所以電源管理的主要目的是減少目標(biāo)設(shè)備的電源消耗,并在系統(tǒng)處于復(fù)位、運(yùn)行、空閑和掛起狀態(tài)時維持和保護(hù)位于RAM中的文件系統(tǒng)。因此,大多數(shù)的嵌入式操作系統(tǒng)都為系統(tǒng)的電源狀態(tài)進(jìn)行了分級,在這里以Windows CE操作系統(tǒng)為例,系統(tǒng)電源狀態(tài)被預(yù)定義了如下基本等級[1-2]:
on,設(shè)備被打開和運(yùn)行的狀態(tài)。設(shè)備接收來自系統(tǒng)的全部電量并為用戶提供全部的功能,此時大部分外設(shè)都處于全速工作模式,設(shè)備耗電量最大。
idle,設(shè)備處于半空閑狀態(tài)?;緵]有外部操作干預(yù),可以考慮使某些外設(shè)進(jìn)入休眠狀態(tài),CPU也可進(jìn)入降頻、低功耗模式。
suspend,設(shè)備待機(jī)狀態(tài)。CPU和所有外設(shè)基本都停止工作,只能依賴外部中斷源喚醒。此時系統(tǒng)耗電量極低。
off,設(shè)備沒有被供電的狀態(tài)。此時系統(tǒng)供電已停止,整個設(shè)備不耗電,停止工作。
受電源管理約束的嵌入式設(shè)備應(yīng)該是處于以上各電源狀態(tài)的轉(zhuǎn)換之中,其基本狀態(tài)切換關(guān)系如圖1所示。
on to idle。當(dāng)內(nèi)核沒有任何線程在運(yùn)行時,電源狀態(tài)將被改變?yōu)閕dle,然后CPU等待一個內(nèi)部中斷。
圖1 系統(tǒng)電源狀態(tài)轉(zhuǎn)換圖
idle to suspend?;顒佑嫈?shù)器超時,CPU進(jìn)入停止工作狀態(tài),只能依靠外部中斷源喚醒。
idle to on。當(dāng)出現(xiàn)一個內(nèi)部中斷時,電源的狀態(tài)轉(zhuǎn)換為on狀態(tài)。在典型情況下,計時器中斷,用戶按鍵中斷等都會引起這種轉(zhuǎn)換。
suspend to on。外部中斷源導(dǎo)致系統(tǒng)切換到on狀態(tài)。在典型情況下,具有外部中斷源的外設(shè)都能觸發(fā)這種轉(zhuǎn)換,如通信模塊中斷、電源按鍵中斷、電池模塊低電量中斷等。
on to off。低電量關(guān)機(jī)或用戶主動操作關(guān)機(jī)會形成這種轉(zhuǎn)換。
off to on。用戶開機(jī)或外部定時器觸發(fā)開機(jī)[1-3]。
從電源管理的思路上看,如果需要做到有效、智能化的電源管理,以下幾點(diǎn)是非常關(guān)鍵的:
①CPU的功耗。智能化的嵌入式CPU芯片具有頻率自動調(diào)節(jié)功能,在系統(tǒng)繁忙度不高時會自動降低工作頻率,以達(dá)到省電的目的。
②on狀態(tài)下的CPU消耗。因為在用戶操作的情況下,系統(tǒng)還是只能處于全速工作狀態(tài),所以設(shè)備的功耗還與嵌入式應(yīng)用軟件的編寫有很大關(guān)系,軟件算法對CPU的消耗影響還是很大的。
③低功耗狀態(tài)的有效設(shè)立及其占空比。這里所說的低功耗狀態(tài)是指除了on狀態(tài)以外的其他電源狀態(tài),這些電源狀態(tài)的設(shè)立本身也是以降低功耗為出發(fā)點(diǎn)的。因此,如何設(shè)立合理的低功耗狀態(tài)并使其正常轉(zhuǎn)換是非常關(guān)鍵的。每定義一種電源狀態(tài)必須有明確的功耗含義,要考慮到該電源狀態(tài)要關(guān)閉和開啟哪些設(shè)備,以達(dá)到從整體上降低功耗的目的。同時,何時進(jìn)入某種低功耗狀態(tài),在該狀態(tài)維持的時間也非常重要。另外,還必須充分考慮應(yīng)用環(huán)境,因為移動式嵌入式設(shè)備大多數(shù)的使用場景是非常復(fù)雜的,比如一部智能手機(jī),想要明確區(qū)分各使用場景是較為困難的。
CPU自身的頻率自動調(diào)節(jié)功能依賴于各CPU廠商的技術(shù),on狀態(tài)的CPU消耗依賴于應(yīng)用程序開發(fā)人員的開發(fā)水平和實(shí)際工作環(huán)境,這兩點(diǎn)都不是本文所關(guān)注的話題,這里主要說明的是一套智能化的電源管理系統(tǒng)。
系統(tǒng)電源狀態(tài)的劃分只是一個邏輯上的定義,其具體表現(xiàn)依賴于具體外設(shè)在各個電源狀態(tài)中的實(shí)際耗電情況。因此,有兩點(diǎn)對于提高電源管理的效率是很重要的:
◆納入電源管理的外設(shè)是否足夠多;
◆電源狀態(tài)的劃分和轉(zhuǎn)換條件是否合理。
越智能化的嵌入式系統(tǒng)具有的電源狀態(tài)等級應(yīng)該越多,但同時控制轉(zhuǎn)換流程也越復(fù)雜。下面以一個智能手機(jī)為例闡述一個智能化的嵌入式電源管理系統(tǒng)。
相比傳統(tǒng)的idle狀態(tài),因為智能手機(jī)面臨更為復(fù)雜的用戶操作場景,所以只靠一個idle狀態(tài)顯然是不夠的。改進(jìn)后的idle分為兩個狀態(tài)等級:用戶空閑狀態(tài)(user-idle)和系統(tǒng)空閑狀態(tài)(system-idle)。user-idle狀態(tài)CPU工作頻率不變,只是涉及用戶感官的某些外設(shè)狀態(tài)發(fā)生改變,如顯示屏亮度變低等。user-idle狀態(tài)維持一段時間后系統(tǒng)再進(jìn)入system-idle狀態(tài),此時CPU降頻工作,大部分外設(shè)進(jìn)入省電狀態(tài),如顯示屏關(guān)閉、觸摸屏關(guān)閉、鍵盤服務(wù)關(guān)閉等。user-idle狀態(tài)設(shè)置的目的在于可以有效避免CPU在on狀態(tài)的最大消耗。因為在此狀態(tài)下實(shí)際上還有工作線程在占據(jù)CPU,整個設(shè)備無法進(jìn)入系統(tǒng)空閑狀態(tài),但是可以通過關(guān)閉或降低某些外設(shè)來達(dá)到降低整體功耗的效果。當(dāng)然,在可能的情況下,idle狀態(tài)還可以根據(jù)實(shí)際場景進(jìn)行更細(xì)致的劃分。
可以通過建立異常處理狀態(tài)來避免不必要的能耗損失。unusual狀態(tài)是新增的一個系統(tǒng)電源狀態(tài),因為系統(tǒng)處于待機(jī)狀態(tài)時經(jīng)常會被各種各樣的中斷喚醒,有些是必須由用戶處理的中斷,如來電、按鍵等,此時suspend狀態(tài)轉(zhuǎn)換到on狀態(tài)就沒什么問題。但如果一些沒有必要由用戶處理的狀態(tài),也跳轉(zhuǎn)到on狀態(tài),就會造成不必要的功耗損失。因此unusual狀態(tài)可以作為邏輯處理層存在,如果需要用戶處理,直接跳轉(zhuǎn)到on狀態(tài),否則在一定時間內(nèi)轉(zhuǎn)換回到suspend狀態(tài)。
改進(jìn)后的系統(tǒng)電源狀態(tài)轉(zhuǎn)換圖如圖2所示。
增加的電源狀態(tài)轉(zhuǎn)換邏輯:
on to user-idle。當(dāng)自定義的轉(zhuǎn)換條件滿足時,設(shè)備跳轉(zhuǎn)到user-idle狀態(tài),此時某些外設(shè)根據(jù)系統(tǒng)電源狀態(tài)映射相應(yīng)的設(shè)備電源狀態(tài)。CPU仍然處于全速工作狀態(tài)。
圖2 改進(jìn)后的系統(tǒng)電源狀態(tài)轉(zhuǎn)換圖
user-idle to system-idle。當(dāng)內(nèi)核沒有任何線程在運(yùn)行時,電源狀態(tài)將被改變?yōu)閕dle,然后CPU等待一個內(nèi)部中斷。
system-idle to suspend?;顒佑嫈?shù)器超時,CPU進(jìn)入停止工作狀態(tài),只能依靠外部中斷源喚醒。
user-idle/system-idle to on。當(dāng)出現(xiàn)一個內(nèi)部中斷時,電源的狀態(tài)轉(zhuǎn)換為on狀態(tài)。
suspend to unusual。外部中斷源導(dǎo)致系統(tǒng)喚醒,此時會跳轉(zhuǎn)到unusual狀態(tài),由電源管理邏輯控制單元決策進(jìn)一步的狀態(tài)轉(zhuǎn)換,此時,CPU工作正常,但大部分外設(shè)處于待機(jī)狀態(tài)。
unusual to on。如果外部中斷源需要用戶處理,跳轉(zhuǎn)到on狀態(tài)。典型情況如:用戶按電源鍵,通信模塊中斷等。
unusual to suspend。如果外部中斷源不需要用戶處理,自動從此狀態(tài)跳轉(zhuǎn)到suspend狀態(tài),如某些異常中斷或錯誤信號。
系統(tǒng)電源狀態(tài)的轉(zhuǎn)換通常是由一組系統(tǒng)定時器來完成,當(dāng)系統(tǒng)進(jìn)入某個電源狀態(tài)時,此狀態(tài)對應(yīng)的計時器開始計時,分下面幾種狀態(tài)轉(zhuǎn)換情況:
①無外界條件干預(yù),狀態(tài)計時器正常歸零,系統(tǒng)進(jìn)入預(yù)設(shè)的下一電源狀態(tài)。如on to user-idle、user-idle to system-idle、system-idle to suspend、unusual to suspend,此類轉(zhuǎn)換可歸為電源狀態(tài)的自然轉(zhuǎn)換。
②在計時器運(yùn)行過程中,外部條件強(qiáng)制切換電源狀態(tài),此時系統(tǒng)進(jìn)入指定的電源狀態(tài),同時計時器賦值到指定的電源狀態(tài)初值。如在user-idle轉(zhuǎn)換到system-idle過程中,用戶可能會強(qiáng)行切換狀態(tài)到on狀態(tài)。此類轉(zhuǎn)換歸為電源狀態(tài)的強(qiáng)制轉(zhuǎn)換。
③如果不進(jìn)行電源狀態(tài)的維持,系統(tǒng)電源狀態(tài)就會按照自然轉(zhuǎn)換的流程進(jìn)行下去,直至系統(tǒng)待機(jī)。所以很多情況下需要把系統(tǒng)維持在某個電源狀態(tài),這時只需要對狀態(tài)計時器重新初始化即可。
傳統(tǒng)的嵌入式電源管理中,各個狀態(tài)計時器的初值都是固定的,所以,從on到suspend的整個電源狀態(tài)轉(zhuǎn)換周期基本固定。然而在實(shí)際應(yīng)用中,這種策略就顯得不夠智能。因為各種不同場景對電源狀態(tài)的要求是不一致的,有些場景可能會希望盡快待機(jī)以節(jié)省電量,有些場景又希望能系統(tǒng)能長期工作在低功耗狀態(tài)而不能待機(jī)。所以,提出了電源狀態(tài)轉(zhuǎn)換時間的智能調(diào)節(jié)。
智能化電源管理系統(tǒng)的轉(zhuǎn)換時間是根據(jù)當(dāng)前的用戶環(huán)境來進(jìn)行調(diào)節(jié),比如處于屏幕鎖定狀態(tài)時,各個狀態(tài)之間的轉(zhuǎn)換時間會被調(diào)節(jié)到很低,從而系統(tǒng)能在很短時間內(nèi)進(jìn)入到待機(jī)狀態(tài)。而用戶處于瀏覽模式時,on to user-idle和user-idle to system-id le的轉(zhuǎn)換時間會調(diào)節(jié)較長,以避免用戶會經(jīng)常進(jìn)行電源狀態(tài)的強(qiáng)制切換,從而改進(jìn)用戶體驗,同時減少電源狀態(tài)多次轉(zhuǎn)化導(dǎo)致的額外開銷。用戶的使用模式從軟件的角度很容易獲取,再融入到電源管理的狀態(tài)轉(zhuǎn)換策略中。
綜合上述電源管理策略,得出一組模擬用戶使用的電量消耗對比數(shù)據(jù),如圖3所示。
圖3 原始電源管理和改進(jìn)后的電源管理電流消耗
這是一組120m in內(nèi)模擬用戶使用的設(shè)備電流消耗對比圖,虛線表示原始電源管理下的平均電流消耗,實(shí)線表示改進(jìn)后電源管理下的平均電流消耗。原始電源管理在120m in內(nèi)的平均電流為90.4m A,而改進(jìn)后的電源管理在120m in內(nèi)的平均電流為55.9 mA。從中可以看出,相比傳統(tǒng)電源管理,智能化電源管理系統(tǒng)在平均電流節(jié)省方面的效果是非常明顯的,其中抗干擾能力和智能調(diào)節(jié)電源狀態(tài)維持時間起到了非常明顯的作用。
當(dāng)一個設(shè)備驅(qū)動程序被加載時,它應(yīng)該使這個設(shè)備進(jìn)入全開狀態(tài);在一個驅(qū)動程序被卸載時,則應(yīng)該使這 個設(shè)備進(jìn)入關(guān)閉狀態(tài)。這兩個狀態(tài)是設(shè)備必須支持的狀態(tài)。同時,智能化的外設(shè)具備了更多的設(shè)備電源狀態(tài),如sleep、suspend狀態(tài)等,以滿足在系統(tǒng)電源狀態(tài)改變時能對應(yīng)進(jìn)入自身的一種節(jié)電模式。所以,只有納入電源管理的設(shè)備才有條件隨時更新自身的設(shè)備電源狀態(tài),否則設(shè)備一直處于常開狀態(tài)是非常耗電的。
因為不同的嵌入式系統(tǒng)在實(shí)際工作環(huán)境中對外設(shè)的要求差別很大,這里就不再進(jìn)一步闡述??傊?智能化的電源管理設(shè)計原則和前提是盡量使外設(shè)納入系統(tǒng)電源管理的控制。
嵌入式設(shè)備的智能化電源管理是在傳統(tǒng)嵌入式電源管理系統(tǒng)基礎(chǔ)上衍生出來的,其基本出發(fā)點(diǎn)在于充分利用電源管理對外部設(shè)備集中管理,綜合實(shí)際使用場景對系統(tǒng)電源狀態(tài)進(jìn)行更細(xì)致的分級,并明確該狀態(tài)具體的功耗指標(biāo)。同時,能夠自動調(diào)節(jié)電源狀態(tài)的轉(zhuǎn)換時間,有效提高低功耗狀態(tài)的占空比,從而達(dá)到功耗和用戶體驗的最大限度平衡。從實(shí)驗結(jié)果看,這種改進(jìn)的效果是非常明顯的,對于移動嵌入式設(shè)備的續(xù)航能力有很大程度的改進(jìn)。
[1]張冬泉.Windows CE實(shí)用開發(fā)技術(shù)[M].北京:電子工業(yè)出版社,2006.
[2]何宗鍵.Windows CE嵌入式系統(tǒng)[M].北京航空航天工業(yè)出版社,2006.
[3]Petzold C.Windows CE程序設(shè)計[M].北京大學(xué)出版社,1999.