一種利用實時時鍾降低嵌入式係統功耗的方法
發布時間:2014-09-16 責任編輯:sherryyu
【導讀】眾所周知,低功耗已經是衡量一個嵌入式係統的重要指標。而作為嵌入式係統的核心,嵌入式CPU的功耗則對整個係統起著重要的作用。本文介紹一種利用實時時鍾降低嵌入式係統功耗的方法,供大家參考學習。
1.嵌入式CPU低功耗模式介紹
眾所周知,低功耗已經是衡量一個嵌入式係統的重要指標。而作為嵌入式係統的核心,嵌入式CPU的功耗則對整個係統起著重要的作用。當前流行的嵌入式係統CPU,基本都提供低功耗特性。一般而言,當嵌入式CPU都會有工作模式與低功耗模式,而低功耗模式又可進一步分為空閑模式,休眠模式,睡眠模式等。進入低功耗模式後,CPU的功耗會降低很多。而外部中斷發生時,可以將CPU喚醒。一個嵌入式係統運行起來後,當係統進入idle狀態時,就可以讓CPU進入低功耗模式,而當外部中斷發生時,再喚醒CPU,重新回到工作模式。讓CPU盡可能多的處於低功耗模式,可以大大降低係統的功耗。然而,即使係統處於idle而且沒有別的工作要做,係統實時時鍾的中斷,也會不停的喚醒CPU,從而增加係統功耗。因此,可以考慮對係統實時時鍾的中斷進行修改,從而減少對係統功耗的影響。
2.係統實時時鍾與功耗的關係分析
在目前的嵌入式係統中,係統實時時鍾一般是一個硬件循環計數器。當硬件計數器計到一定數值時會向CPUfachuzhongduan。xitongshishishizhongshixiandaiduorenwuqianrushicaozuoxitongdezhongyaozuchengbufen,yinciwomenxuyaoxiantaolunyixiaqianrushicaozuoxitongyuxitongshishishizhongdeguanxi。dangjindeqianrushicaozuoxitongyibandouzhichiduorenwu,youxianjiheshijianpiantiaodu。dangqianrushiOS運行起來後,一般都有一個IDLErenwu,tadeyouxianjizuidi,erqitarenwudeyouxianjidouyinggaibitagao。zaiyouxianjitiaodujizhizhong,zhiyoudangxitongzhongqitagaoyouxianjirenwudouchuyuzusaizhuangtaishi,tacaiyoujihuiyunxing。shijianpiantiaodujizhizhiduitongyouxianjiderenwuyouxiao。yejiushishuo,butongyouxianjiderenwuzhijianshibuhuianshijianpiantiaodulunzhuande,ershianyouxianjilaitiaodude。yincidangxitongjinruIDLE任務時,可以認為係統中沒有工作要CPU來做,係統為idle狀態。當時間片調度機製開啟後,嵌入式OS就會根據時間片來調度任務。
也就是當一個時間片用完後,要運行調度器來決定下一個時間片的歸屬。時間片的基本單位是係統tick,而係統tick是以係統實時時鍾為基礎的。當係統實時時鍾中斷產生時,CPU會將係統tick加1。每當係統tick增加n(一個時間片)時,嵌入式OS將啟用調度器進行時間片調度。因此,當時間片調度機製開啟後,就需要係統tick的de實shi時shi更geng新xin和he調tiao度du器qi的de定ding時shi運yun行xing,也ye就jiu需xu要yao實shi時shi時shi鍾zhong中zhong斷duan以yi很hen高gao的de頻pin率lv定ding時shi產chan生sheng。如ru果guo關guan閉bi時shi間jian片pian調tiao度du機ji製zhi,則ze任ren務wu之zhi間jian隻zhi需xu要yao按an照zhao優you先xian級ji來lai調tiao度du,這zhe樣yang就jiu不bu需xu要yao計ji算suan時shi間jian片pian,也ye就jiu是shi係xi統tongtickbuyongshishigengxin,shishishizhongdezhongduanbubiyihengaodepinlvchansheng,tiaoduqiyebuyongdingshiyunxing。zheyangjiuyoukenengkaolvyanchangshishishizhongdezhongduanjiange。tongshitiaoduqibuxuyaojinxingshijianpiantiaodu,keyijieshengxitongkaixiao。danguanbishijianpiantiaoduhou,xitongjiuzhiyouyouxianjitiaodu。zhejiuyaoqiuxitongdesuoyourenwuyaozhudongzusai,erbuyaoqidaitiaoduqibatongyouxianjideqitarenwutiaoduchuCPUerrangzijiyunxing。zaimuqianliuxingdeqianrushicaozuoxitongzhong,yibandoutigonglehenduozhudongzusaidejizhi,yinciyaozuodaozheyidianbingbunan。yanchangshishishizhongdezhongduanjiange,keyirangCPU長期處於低功耗狀態,直到有設備中斷喚醒CPU。
這樣將大大減低係統在空閑時的功耗。延長實時時鍾中斷間隔後,需要考慮的問題有兩個,一是係統tick,另一個是係統delay。係統tick是實時時鍾和操作係統之間的接口,操作係統與時間相關的模塊和API,基本都是基於tick的。在一般係統中,實時時鍾的中斷是每個tick一次。因此tick是操作係統最小的計時單位。延長實時時鍾中斷間隔後,係統tick就會長時間不增加,因此怎樣保證係統tick的準確性,就是最基本的問題。解決了tick的準確性,就可以隔離實時時鍾對操作係統的影響。係統delay是操作係統一種重要的阻塞機製,它主要用於讓一個任務主動讓出CPU一段時間。一般係統delay是基於係統實時時鍾的,係統delay的基本單位就是tick。當調用delay時,API函數會首先得到當前係統tick,然後加上需要delay的時間,形成一個未來的delay時間點,再將任務掛到係統的delay隊列上。因此delay隊列上的所有任務都對應一個自己的delay時間點。當係統tick超過某個任務的delay時間點時,該任務就應該醒來。這就需要實時時鍾的中斷來喚醒CPU,並運行調度器讓delay的任務重新進入就緒隊列。如果實時時鍾中斷間隔延長,係統tick就會很長時間不增加,就很難保證delay的準確性。同時delay時間到達後,也無法喚醒任務。要保證係統tick的準確性,就要求每次主動獲得係統tick時,需要通過實時時鍾硬件計數器的值計算出當前的係統tick。同時,需要保證主動獲取和實時時鍾中斷之間的同步。而對於係統delay,則需要修改硬件計數器的計數值,使其為係統delay隊列上的最小delay時間點的delay時間。這樣可以利用硬件計數器來準確控製delay的準確性,並且利用中斷來及時調度任務。
3.在I.MX51上的解決方案:
ECOS是一款優秀的輕量級嵌入式操作係統,它的內核微小,緊湊,支持多任務,優先級和時間片調度機製。飛思卡爾的多媒體芯片i.mx51基於ARM Cortex-A8核,具有很高的性能,同時支持了ARM提供的低功耗功能。ARM提供低功耗模式,即睡眠模式。ARM執行指令WFI後,會進入睡眠狀態。在睡眠模式下,ARM的時鍾被關閉,ARM隻消耗極低的功耗來維護自身的狀態,即啟用SRPG(State retaining power gate)。當有中斷發生時,ARM會被喚醒,恢複時鍾,重新開始執行。MX51提供了多個硬件計數器,本文采用其中的GPT作為實時時鍾。GPT是一個循環計數器,可以設置最大為0xffffffff的計數值,每個時鍾計數值減1,當計數值減到0時觸發中斷,時鍾為32KHz。GPT的計數值可以在任意時刻被ARM讀取,讀取是不影響計數的。當IDLE任務運行時,IDLE就執行WFI指令,讓ARM進入低功耗模式。如果有設備產生中斷,ARM就會被喚醒,處理中斷以及所需的任務調度,任務運行。基於前麵的分析,本文對ECOS的時間片調度和實時時鍾係統進行了修改。對於時間片調度機製,在ECOS的配置文件中將其關閉。
對於實時時鍾,則延長了它的中斷間隔。係統tick在兩種情況下會被更新,一種是當調用ECOS API去讀係統tick的時候,另一種就是GPT產生中斷。當ECOS啟動後,將GPT的計數值設為最大,這樣GPT就需要很長時間才會產生一次中斷。在這期間,係統tick隻會在ECOS API主動讀取時才會更新。係統tick的更新是通過讀取硬件計數器的計數值計算出來的。在ECOS係統的實時時鍾類中增加一個變量pre_hardware_count用於記錄上一次讀取的硬件計數器的值。當每次係統API讀取tick時,當前硬件計數器的值與上一次讀取時硬件計數器的值的差值就是兩次讀取之間已經過去的tick數。當實時時鍾產生中斷時,即硬件計數器計到0,將此變量清零。
這樣,就可以保證每次讀取係統tick 時,能得到一個準確的係統tick值。當有任務要主動延時一段時間,即調用係統delay API時。ECOS的API函數會計算出該任務的delay時間點,然後將該任務掛入係統delay隊列。然後遍曆係統delay隊列,找出隊列中的最小delay時間點,把該delay時間點對應的delay時間寫入GPT,讓GPT來控製delay時間。delay時間到後,GPT會產生中斷,ECOS將中斷處理程序分為兩部分,ISR和DSR。在ISR中將硬件計數器設為最大值。然後在DSR中增加係統tick,將超時的任務重新掛入就緒隊列,並且再次找出係統delay隊列上的最小delay時間點,寫入硬件計數器。如果係統delay隊列為空,則不對硬件計數器再進行操作,保持ISR 中寫入的最大值。最後ECOS會運行調度器,如果超時的任務具有最高優先級,那麼它就會得到運行,也就是醒過來。這樣也就可以保證係統delay的準確性與及時性。下圖是修改後實時時鍾後係統tick, delay以及調度器相關的流程圖。
下圖是修改後實時時鍾後係統tick, delay以及調度器相關的流程圖。

圖1. 實時時鍾修改流程圖
下麵是在飛思卡爾公司i.mx51上的實驗數據。

可以看出,修改了時間片調度和實時時鍾後,不論ARM工作在哪個電壓點,係統IDLE時的功耗降低了差不多10倍。因此,延長實時時鍾中斷間隔能極大的降低係統功耗。
4.其他係統的類似方法
當前流行的嵌入式操作係統Linux和WinCE也都在討論修改係統實時時鍾中斷方式以求降低係統功耗。對於Linux係統,有一個Less Watts項目,實現tickless idle,即無tick的idle,其實就是修改實時時鍾的中斷方式。WinCE則提供了可變係統時鍾節拍Variable Tick Scheduler,在進入idle狀態前改變係統時鍾節拍,這樣在預期的時間段裏,idle狀態不會被無謂的係統時鍾中斷喚醒。
5.結論
可以看出,通過修改實時時鍾中斷方式,可以使CPU在idlezhuangtaixiachangshijianchuyudigonghaomoshi,jidadejiangdixitonggonghao。erqiedangqianliuxingdeqianrushicaozuoxitongdouzaijijidetantaocifangfa。xiangxinjinhouzhexianggongnenghuichengweiqianrushicaozuoxitongbibeideyigegongneng。
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 築基AI4S:摩爾線程全功能GPU加速中國生命科學自主生態
- 一秒檢測,成本降至萬分之一,光引科技把幾十萬的台式光譜儀“搬”到了手腕上
- AI服務器電源機櫃Power Rack HVDC MW級測試方案
- 突破工藝邊界,奎芯科技LPDDR5X IP矽驗證通過,速率達9600Mbps
- 通過直接、準確、自動測量超低範圍的氯殘留來推動反滲透膜保護
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索




