一種利用實時時鐘降低嵌入式系統(tǒng)功耗的方法
發(fā)布時間:2014-09-16 責(zé)任編輯:sherryyu
【導(dǎo)讀】眾所周知,低功耗已經(jīng)是衡量一個嵌入式系統(tǒng)的重要指標(biāo)。而作為嵌入式系統(tǒng)的核心,嵌入式CPU的功耗則對整個系統(tǒng)起著重要的作用。本文介紹一種利用實時時鐘降低嵌入式系統(tǒng)功耗的方法,供大家參考學(xué)習(xí)。
1.嵌入式CPU低功耗模式介紹
眾所周知,低功耗已經(jīng)是衡量一個嵌入式系統(tǒng)的重要指標(biāo)。而作為嵌入式系統(tǒng)的核心,嵌入式CPU的功耗則對整個系統(tǒng)起著重要的作用。當(dāng)前流行的嵌入式系統(tǒng)CPU,基本都提供低功耗特性。一般而言,當(dāng)嵌入式CPU都會有工作模式與低功耗模式,而低功耗模式又可進(jìn)一步分為空閑模式,休眠模式,睡眠模式等。進(jìn)入低功耗模式后,CPU的功耗會降低很多。而外部中斷發(fā)生時,可以將CPU喚醒。一個嵌入式系統(tǒng)運行起來后,當(dāng)系統(tǒng)進(jìn)入idle狀態(tài)時,就可以讓CPU進(jìn)入低功耗模式,而當(dāng)外部中斷發(fā)生時,再喚醒CPU,重新回到工作模式。讓CPU盡可能多的處于低功耗模式,可以大大降低系統(tǒng)的功耗。然而,即使系統(tǒng)處于idle而且沒有別的工作要做,系統(tǒng)實時時鐘的中斷,也會不停的喚醒CPU,從而增加系統(tǒng)功耗。因此,可以考慮對系統(tǒng)實時時鐘的中斷進(jìn)行修改,從而減少對系統(tǒng)功耗的影響。
2.系統(tǒng)實時時鐘與功耗的關(guān)系分析
在目前的嵌入式系統(tǒng)中,系統(tǒng)實時時鐘一般是一個硬件循環(huán)計數(shù)器。當(dāng)硬件計數(shù)器計到一定數(shù)值時會向CPU發(fā)出中斷。系統(tǒng)實時時鐘是現(xiàn)代多任務(wù)嵌入式操作系統(tǒng)的重要組成部分,因此我們需要先討論一下嵌入式操作系統(tǒng)與系統(tǒng)實時時鐘的關(guān)系。當(dāng)今的嵌入式操作系統(tǒng)一般都支持多任務(wù),優(yōu)先級和時間片調(diào)度。當(dāng)嵌入式OS運行起來后,一般都有一個IDLE任務(wù),它的優(yōu)先級最低,而其他任務(wù)的優(yōu)先級都應(yīng)該比它高。在優(yōu)先級調(diào)度機(jī)制中,只有當(dāng)系統(tǒng)中其他高優(yōu)先級任務(wù)都處于阻塞狀態(tài)時,它才有機(jī)會運行。時間片調(diào)度機(jī)制只對同優(yōu)先級的任務(wù)有效。也就是說,不同優(yōu)先級的任務(wù)之間是不會按時間片調(diào)度輪轉(zhuǎn)的,而是按優(yōu)先級來調(diào)度的。因此當(dāng)系統(tǒng)進(jìn)入IDLE任務(wù)時,可以認(rèn)為系統(tǒng)中沒有工作要CPU來做,系統(tǒng)為idle狀態(tài)。當(dāng)時間片調(diào)度機(jī)制開啟后,嵌入式OS就會根據(jù)時間片來調(diào)度任務(wù)。
也就是當(dāng)一個時間片用完后,要運行調(diào)度器來決定下一個時間片的歸屬。時間片的基本單位是系統(tǒng)tick,而系統(tǒng)tick是以系統(tǒng)實時時鐘為基礎(chǔ)的。當(dāng)系統(tǒng)實時時鐘中斷產(chǎn)生時,CPU會將系統(tǒng)tick加1。每當(dāng)系統(tǒng)tick增加n(一個時間片)時,嵌入式OS將啟用調(diào)度器進(jìn)行時間片調(diào)度。因此,當(dāng)時間片調(diào)度機(jī)制開啟后,就需要系統(tǒng)tick的實時更新和調(diào)度器的定時運行,也就需要實時時鐘中斷以很高的頻率定時產(chǎn)生。如果關(guān)閉時間片調(diào)度機(jī)制,則任務(wù)之間只需要按照優(yōu)先級來調(diào)度,這樣就不需要計算時間片,也就是系統(tǒng)tick不用實時更新,實時時鐘的中斷不必以很高的頻率產(chǎn)生,調(diào)度器也不用定時運行。這樣就有可能考慮延長實時時鐘的中斷間隔。同時調(diào)度器不需要進(jìn)行時間片調(diào)度,可以節(jié)省系統(tǒng)開銷。但關(guān)閉時間片調(diào)度后,系統(tǒng)就只有優(yōu)先級調(diào)度。這就要求系統(tǒng)的所有任務(wù)要主動阻塞,而不要期待調(diào)度器把同優(yōu)先級的其他任務(wù)調(diào)度出CPU而讓自己運行。在目前流行的嵌入式操作系統(tǒng)中,一般都提供了很多主動阻塞的機(jī)制,因此要做到這一點并不難。延長實時時鐘的中斷間隔,可以讓CPU長期處于低功耗狀態(tài),直到有設(shè)備中斷喚醒CPU。
這樣將大大減低系統(tǒng)在空閑時的功耗。延長實時時鐘中斷間隔后,需要考慮的問題有兩個,一是系統(tǒng)tick,另一個是系統(tǒng)delay。系統(tǒng)tick是實時時鐘和操作系統(tǒng)之間的接口,操作系統(tǒng)與時間相關(guān)的模塊和API,基本都是基于tick的。在一般系統(tǒng)中,實時時鐘的中斷是每個tick一次。因此tick是操作系統(tǒng)最小的計時單位。延長實時時鐘中斷間隔后,系統(tǒng)tick就會長時間不增加,因此怎樣保證系統(tǒng)tick的準(zhǔn)確性,就是最基本的問題。解決了tick的準(zhǔn)確性,就可以隔離實時時鐘對操作系統(tǒng)的影響。系統(tǒng)delay是操作系統(tǒng)一種重要的阻塞機(jī)制,它主要用于讓一個任務(wù)主動讓出CPU一段時間。一般系統(tǒng)delay是基于系統(tǒng)實時時鐘的,系統(tǒng)delay的基本單位就是tick。當(dāng)調(diào)用delay時,API函數(shù)會首先得到當(dāng)前系統(tǒng)tick,然后加上需要delay的時間,形成一個未來的delay時間點,再將任務(wù)掛到系統(tǒng)的delay隊列上。因此delay隊列上的所有任務(wù)都對應(yīng)一個自己的delay時間點。當(dāng)系統(tǒng)tick超過某個任務(wù)的delay時間點時,該任務(wù)就應(yīng)該醒來。這就需要實時時鐘的中斷來喚醒CPU,并運行調(diào)度器讓delay的任務(wù)重新進(jìn)入就緒隊列。如果實時時鐘中斷間隔延長,系統(tǒng)tick就會很長時間不增加,就很難保證delay的準(zhǔn)確性。同時delay時間到達(dá)后,也無法喚醒任務(wù)。要保證系統(tǒng)tick的準(zhǔn)確性,就要求每次主動獲得系統(tǒng)tick時,需要通過實時時鐘硬件計數(shù)器的值計算出當(dāng)前的系統(tǒng)tick。同時,需要保證主動獲取和實時時鐘中斷之間的同步。而對于系統(tǒng)delay,則需要修改硬件計數(shù)器的計數(shù)值,使其為系統(tǒng)delay隊列上的最小delay時間點的delay時間。這樣可以利用硬件計數(shù)器來準(zhǔn)確控制delay的準(zhǔn)確性,并且利用中斷來及時調(diào)度任務(wù)。
3.在I.MX51上的解決方案:
ECOS是一款優(yōu)秀的輕量級嵌入式操作系統(tǒng),它的內(nèi)核微小,緊湊,支持多任務(wù),優(yōu)先級和時間片調(diào)度機(jī)制。飛思卡爾的多媒體芯片i.mx51基于ARM Cortex-A8核,具有很高的性能,同時支持了ARM提供的低功耗功能。ARM提供低功耗模式,即睡眠模式。ARM執(zhí)行指令WFI后,會進(jìn)入睡眠狀態(tài)。在睡眠模式下,ARM的時鐘被關(guān)閉,ARM只消耗極低的功耗來維護(hù)自身的狀態(tài),即啟用SRPG(State retaining power gate)。當(dāng)有中斷發(fā)生時,ARM會被喚醒,恢復(fù)時鐘,重新開始執(zhí)行。MX51提供了多個硬件計數(shù)器,本文采用其中的GPT作為實時時鐘。GPT是一個循環(huán)計數(shù)器,可以設(shè)置最大為0xffffffff的計數(shù)值,每個時鐘計數(shù)值減1,當(dāng)計數(shù)值減到0時觸發(fā)中斷,時鐘為32KHz。GPT的計數(shù)值可以在任意時刻被ARM讀取,讀取是不影響計數(shù)的。當(dāng)IDLE任務(wù)運行時,IDLE就執(zhí)行WFI指令,讓ARM進(jìn)入低功耗模式。如果有設(shè)備產(chǎn)生中斷,ARM就會被喚醒,處理中斷以及所需的任務(wù)調(diào)度,任務(wù)運行?;谇懊娴姆治?,本文對ECOS的時間片調(diào)度和實時時鐘系統(tǒng)進(jìn)行了修改。對于時間片調(diào)度機(jī)制,在ECOS的配置文件中將其關(guān)閉。
對于實時時鐘,則延長了它的中斷間隔。系統(tǒng)tick在兩種情況下會被更新,一種是當(dāng)調(diào)用ECOS API去讀系統(tǒng)tick的時候,另一種就是GPT產(chǎn)生中斷。當(dāng)ECOS啟動后,將GPT的計數(shù)值設(shè)為最大,這樣GPT就需要很長時間才會產(chǎn)生一次中斷。在這期間,系統(tǒng)tick只會在ECOS API主動讀取時才會更新。系統(tǒng)tick的更新是通過讀取硬件計數(shù)器的計數(shù)值計算出來的。在ECOS系統(tǒng)的實時時鐘類中增加一個變量pre_hardware_count用于記錄上一次讀取的硬件計數(shù)器的值。當(dāng)每次系統(tǒng)API讀取tick時,當(dāng)前硬件計數(shù)器的值與上一次讀取時硬件計數(shù)器的值的差值就是兩次讀取之間已經(jīng)過去的tick數(shù)。當(dāng)實時時鐘產(chǎn)生中斷時,即硬件計數(shù)器計到0,將此變量清零。
這樣,就可以保證每次讀取系統(tǒng)tick 時,能得到一個準(zhǔn)確的系統(tǒng)tick值。當(dāng)有任務(wù)要主動延時一段時間,即調(diào)用系統(tǒng)delay API時。ECOS的API函數(shù)會計算出該任務(wù)的delay時間點,然后將該任務(wù)掛入系統(tǒng)delay隊列。然后遍歷系統(tǒng)delay隊列,找出隊列中的最小delay時間點,把該delay時間點對應(yīng)的delay時間寫入GPT,讓GPT來控制delay時間。delay時間到后,GPT會產(chǎn)生中斷,ECOS將中斷處理程序分為兩部分,ISR和DSR。在ISR中將硬件計數(shù)器設(shè)為最大值。然后在DSR中增加系統(tǒng)tick,將超時的任務(wù)重新掛入就緒隊列,并且再次找出系統(tǒng)delay隊列上的最小delay時間點,寫入硬件計數(shù)器。如果系統(tǒng)delay隊列為空,則不對硬件計數(shù)器再進(jìn)行操作,保持ISR 中寫入的最大值。最后ECOS會運行調(diào)度器,如果超時的任務(wù)具有最高優(yōu)先級,那么它就會得到運行,也就是醒過來。這樣也就可以保證系統(tǒng)delay的準(zhǔn)確性與及時性。下圖是修改后實時時鐘后系統(tǒng)tick, delay以及調(diào)度器相關(guān)的流程圖。
下圖是修改后實時時鐘后系統(tǒng)tick, delay以及調(diào)度器相關(guān)的流程圖。
圖1. 實時時鐘修改流程圖
下面是在飛思卡爾公司i.mx51上的實驗數(shù)據(jù)。
可以看出,修改了時間片調(diào)度和實時時鐘后,不論ARM工作在哪個電壓點,系統(tǒng)IDLE時的功耗降低了差不多10倍。因此,延長實時時鐘中斷間隔能極大的降低系統(tǒng)功耗。
4.其他系統(tǒng)的類似方法
當(dāng)前流行的嵌入式操作系統(tǒng)Linux和WinCE也都在討論修改系統(tǒng)實時時鐘中斷方式以求降低系統(tǒng)功耗。對于Linux系統(tǒng),有一個Less Watts項目,實現(xiàn)tickless idle,即無tick的idle,其實就是修改實時時鐘的中斷方式。WinCE則提供了可變系統(tǒng)時鐘節(jié)拍Variable Tick Scheduler,在進(jìn)入idle狀態(tài)前改變系統(tǒng)時鐘節(jié)拍,這樣在預(yù)期的時間段里,idle狀態(tài)不會被無謂的系統(tǒng)時鐘中斷喚醒。
5.結(jié)論
可以看出,通過修改實時時鐘中斷方式,可以使CPU在idle狀態(tài)下長時間處于低功耗模式,極大的降低系統(tǒng)功耗。而且當(dāng)前流行的嵌入式操作系統(tǒng)都在積極的探討此方法。相信今后這項功能會成為嵌入式操作系統(tǒng)必備的一個功能。
特別推薦
- 增強(qiáng)視覺傳感器功能:3D圖像拼接算法幫助擴(kuò)大視場
- PNP 晶體管:特性和應(yīng)用
- 使用IO-Link收發(fā)器管理數(shù)據(jù)鏈路如何簡化微控制器選擇
- 用好 DMA控制器這兩種模式 MCU效率大大提高!
- 深入分析帶耦合電感多相降壓轉(zhuǎn)換器的電壓紋波問題
- Honda(本田)與瑞薩簽署協(xié)議,共同開發(fā)用于軟件定義汽車的高性能SoC
- 第13講:超小型全SiC DIPIPM
技術(shù)文章更多>>
- 2025第六屆深圳國際芯片、模組與應(yīng)用方案展覽會
- 接線端子的類型與設(shè)計選擇考慮事項
- 想提高高壓LED照明中的效率和功率密度?上GaN技術(shù)!
- 圖像傳感器選擇5大要點,一文掌握
- 管理、轉(zhuǎn)換和存儲:向分布式電網(wǎng)轉(zhuǎn)型
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
磁敏三極管
磁性存儲器
磁性元件
磁珠電感
存儲器
大功率管
單向可控硅
刀開關(guān)
等離子顯示屏
低頻電感
低通濾波器
低音炮電路
滌綸電容
點膠設(shè)備
電池
電池管理系統(tǒng)
電磁蜂鳴器
電磁兼容
電磁爐危害
電動車
電動工具
電動汽車
電感
電工電路
電機(jī)控制
電解電容
電纜連接器
電力電子
電力繼電器
電力線通信