一種利用實(shí)時(shí)時(shí)鐘降低嵌入式系統(tǒng)功耗的方法
發(fā)布時(shí)間:2014-09-16 責(zé)任編輯:sherryyu
【導(dǎo)讀】眾所周知,低功耗已經(jīng)是衡量一個嵌入式系統(tǒng)的重要指標(biāo)。而作為嵌入式系統(tǒng)的核心,嵌入式CPU的功耗則對整個系統(tǒng)起著重要的作用。本文介紹一種利用實(shí)時(shí)時(shí)鐘降低嵌入式系統(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ā)生時(shí),可以將CPU喚醒。一個嵌入式系統(tǒng)運(yùn)行起來后,當(dāng)系統(tǒng)進(jìn)入idle狀態(tài)時(shí),就可以讓CPU進(jìn)入低功耗模式,而當(dāng)外部中斷發(fā)生時(shí),再喚醒CPU,重新回到工作模式。讓CPU盡可能多的處于低功耗模式,可以大大降低系統(tǒng)的功耗。然而,即使系統(tǒng)處于idle而且沒有別的工作要做,系統(tǒng)實(shí)時(shí)時(shí)鐘的中斷,也會不停的喚醒CPU,從而增加系統(tǒng)功耗。因此,可以考慮對系統(tǒng)實(shí)時(shí)時(shí)鐘的中斷進(jìn)行修改,從而減少對系統(tǒng)功耗的影響。
2.系統(tǒng)實(shí)時(shí)時(shí)鐘與功耗的關(guān)系分析
在目前的嵌入式系統(tǒng)中,系統(tǒng)實(shí)時(shí)時(shí)鐘一般是一個硬件循環(huán)計(jì)數(shù)器。當(dāng)硬件計(jì)數(shù)器計(jì)到一定數(shù)值時(shí)會向CPU發(fā)出中斷。系統(tǒng)實(shí)時(shí)時(shí)鐘是現(xiàn)代多任務(wù)嵌入式操作系統(tǒng)的重要組成部分,因此我們需要先討論一下嵌入式操作系統(tǒng)與系統(tǒng)實(shí)時(shí)時(shí)鐘的關(guān)系。當(dāng)今的嵌入式操作系統(tǒng)一般都支持多任務(wù),優(yōu)先級和時(shí)間片調(diào)度。當(dāng)嵌入式OS運(yùn)行起來后,一般都有一個IDLE任務(wù),它的優(yōu)先級最低,而其他任務(wù)的優(yōu)先級都應(yīng)該比它高。在優(yōu)先級調(diào)度機(jī)制中,只有當(dāng)系統(tǒng)中其他高優(yōu)先級任務(wù)都處于阻塞狀態(tài)時(shí),它才有機(jī)會運(yùn)行。時(shí)間片調(diào)度機(jī)制只對同優(yōu)先級的任務(wù)有效。也就是說,不同優(yōu)先級的任務(wù)之間是不會按時(shí)間片調(diào)度輪轉(zhuǎn)的,而是按優(yōu)先級來調(diào)度的。因此當(dāng)系統(tǒng)進(jìn)入IDLE任務(wù)時(shí),可以認(rèn)為系統(tǒng)中沒有工作要CPU來做,系統(tǒng)為idle狀態(tài)。當(dāng)時(shí)間片調(diào)度機(jī)制開啟后,嵌入式OS就會根據(jù)時(shí)間片來調(diào)度任務(wù)。
也就是當(dāng)一個時(shí)間片用完后,要運(yùn)行調(diào)度器來決定下一個時(shí)間片的歸屬。時(shí)間片的基本單位是系統(tǒng)tick,而系統(tǒng)tick是以系統(tǒng)實(shí)時(shí)時(shí)鐘為基礎(chǔ)的。當(dāng)系統(tǒng)實(shí)時(shí)時(shí)鐘中斷產(chǎn)生時(shí),CPU會將系統(tǒng)tick加1。每當(dāng)系統(tǒng)tick增加n(一個時(shí)間片)時(shí),嵌入式OS將啟用調(diào)度器進(jìn)行時(shí)間片調(diào)度。因此,當(dāng)時(shí)間片調(diào)度機(jī)制開啟后,就需要系統(tǒng)tick的實(shí)時(shí)更新和調(diào)度器的定時(shí)運(yùn)行,也就需要實(shí)時(shí)時(shí)鐘中斷以很高的頻率定時(shí)產(chǎn)生。如果關(guān)閉時(shí)間片調(diào)度機(jī)制,則任務(wù)之間只需要按照優(yōu)先級來調(diào)度,這樣就不需要計(jì)算時(shí)間片,也就是系統(tǒng)tick不用實(shí)時(shí)更新,實(shí)時(shí)時(shí)鐘的中斷不必以很高的頻率產(chǎn)生,調(diào)度器也不用定時(shí)運(yùn)行。這樣就有可能考慮延長實(shí)時(shí)時(shí)鐘的中斷間隔。同時(shí)調(diào)度器不需要進(jìn)行時(shí)間片調(diào)度,可以節(jié)省系統(tǒng)開銷。但關(guān)閉時(shí)間片調(diào)度后,系統(tǒng)就只有優(yōu)先級調(diào)度。這就要求系統(tǒng)的所有任務(wù)要主動阻塞,而不要期待調(diào)度器把同優(yōu)先級的其他任務(wù)調(diào)度出CPU而讓自己運(yùn)行。在目前流行的嵌入式操作系統(tǒng)中,一般都提供了很多主動阻塞的機(jī)制,因此要做到這一點(diǎn)并不難。延長實(shí)時(shí)時(shí)鐘的中斷間隔,可以讓CPU長期處于低功耗狀態(tài),直到有設(shè)備中斷喚醒CPU。
這樣將大大減低系統(tǒng)在空閑時(shí)的功耗。延長實(shí)時(shí)時(shí)鐘中斷間隔后,需要考慮的問題有兩個,一是系統(tǒng)tick,另一個是系統(tǒng)delay。系統(tǒng)tick是實(shí)時(shí)時(shí)鐘和操作系統(tǒng)之間的接口,操作系統(tǒng)與時(shí)間相關(guān)的模塊和API,基本都是基于tick的。在一般系統(tǒng)中,實(shí)時(shí)時(shí)鐘的中斷是每個tick一次。因此tick是操作系統(tǒng)最小的計(jì)時(shí)單位。延長實(shí)時(shí)時(shí)鐘中斷間隔后,系統(tǒng)tick就會長時(shí)間不增加,因此怎樣保證系統(tǒng)tick的準(zhǔn)確性,就是最基本的問題。解決了tick的準(zhǔn)確性,就可以隔離實(shí)時(shí)時(shí)鐘對操作系統(tǒng)的影響。系統(tǒng)delay是操作系統(tǒng)一種重要的阻塞機(jī)制,它主要用于讓一個任務(wù)主動讓出CPU一段時(shí)間。一般系統(tǒng)delay是基于系統(tǒng)實(shí)時(shí)時(shí)鐘的,系統(tǒng)delay的基本單位就是tick。當(dāng)調(diào)用delay時(shí),API函數(shù)會首先得到當(dāng)前系統(tǒng)tick,然后加上需要delay的時(shí)間,形成一個未來的delay時(shí)間點(diǎn),再將任務(wù)掛到系統(tǒng)的delay隊(duì)列上。因此delay隊(duì)列上的所有任務(wù)都對應(yīng)一個自己的delay時(shí)間點(diǎn)。當(dāng)系統(tǒng)tick超過某個任務(wù)的delay時(shí)間點(diǎn)時(shí),該任務(wù)就應(yīng)該醒來。這就需要實(shí)時(shí)時(shí)鐘的中斷來喚醒CPU,并運(yùn)行調(diào)度器讓delay的任務(wù)重新進(jìn)入就緒隊(duì)列。如果實(shí)時(shí)時(shí)鐘中斷間隔延長,系統(tǒng)tick就會很長時(shí)間不增加,就很難保證delay的準(zhǔn)確性。同時(shí)delay時(shí)間到達(dá)后,也無法喚醒任務(wù)。要保證系統(tǒng)tick的準(zhǔn)確性,就要求每次主動獲得系統(tǒng)tick時(shí),需要通過實(shí)時(shí)時(shí)鐘硬件計(jì)數(shù)器的值計(jì)算出當(dāng)前的系統(tǒng)tick。同時(shí),需要保證主動獲取和實(shí)時(shí)時(shí)鐘中斷之間的同步。而對于系統(tǒng)delay,則需要修改硬件計(jì)數(shù)器的計(jì)數(shù)值,使其為系統(tǒng)delay隊(duì)列上的最小delay時(shí)間點(diǎn)的delay時(shí)間。這樣可以利用硬件計(jì)數(shù)器來準(zhǔn)確控制delay的準(zhǔn)確性,并且利用中斷來及時(shí)調(diào)度任務(wù)。
3.在I.MX51上的解決方案:
ECOS是一款優(yōu)秀的輕量級嵌入式操作系統(tǒng),它的內(nèi)核微小,緊湊,支持多任務(wù),優(yōu)先級和時(shí)間片調(diào)度機(jī)制。飛思卡爾的多媒體芯片i.mx51基于ARM Cortex-A8核,具有很高的性能,同時(shí)支持了ARM提供的低功耗功能。ARM提供低功耗模式,即睡眠模式。ARM執(zhí)行指令WFI后,會進(jìn)入睡眠狀態(tài)。在睡眠模式下,ARM的時(shí)鐘被關(guān)閉,ARM只消耗極低的功耗來維護(hù)自身的狀態(tài),即啟用SRPG(State retaining power gate)。當(dāng)有中斷發(fā)生時(shí),ARM會被喚醒,恢復(fù)時(shí)鐘,重新開始執(zhí)行。MX51提供了多個硬件計(jì)數(shù)器,本文采用其中的GPT作為實(shí)時(shí)時(shí)鐘。GPT是一個循環(huán)計(jì)數(shù)器,可以設(shè)置最大為0xffffffff的計(jì)數(shù)值,每個時(shí)鐘計(jì)數(shù)值減1,當(dāng)計(jì)數(shù)值減到0時(shí)觸發(fā)中斷,時(shí)鐘為32KHz。GPT的計(jì)數(shù)值可以在任意時(shí)刻被ARM讀取,讀取是不影響計(jì)數(shù)的。當(dāng)IDLE任務(wù)運(yùn)行時(shí),IDLE就執(zhí)行WFI指令,讓ARM進(jìn)入低功耗模式。如果有設(shè)備產(chǎn)生中斷,ARM就會被喚醒,處理中斷以及所需的任務(wù)調(diào)度,任務(wù)運(yùn)行?;谇懊娴姆治觯疚膶COS的時(shí)間片調(diào)度和實(shí)時(shí)時(shí)鐘系統(tǒng)進(jìn)行了修改。對于時(shí)間片調(diào)度機(jī)制,在ECOS的配置文件中將其關(guān)閉。
對于實(shí)時(shí)時(shí)鐘,則延長了它的中斷間隔。系統(tǒng)tick在兩種情況下會被更新,一種是當(dāng)調(diào)用ECOS API去讀系統(tǒng)tick的時(shí)候,另一種就是GPT產(chǎn)生中斷。當(dāng)ECOS啟動后,將GPT的計(jì)數(shù)值設(shè)為最大,這樣GPT就需要很長時(shí)間才會產(chǎn)生一次中斷。在這期間,系統(tǒng)tick只會在ECOS API主動讀取時(shí)才會更新。系統(tǒng)tick的更新是通過讀取硬件計(jì)數(shù)器的計(jì)數(shù)值計(jì)算出來的。在ECOS系統(tǒng)的實(shí)時(shí)時(shí)鐘類中增加一個變量pre_hardware_count用于記錄上一次讀取的硬件計(jì)數(shù)器的值。當(dāng)每次系統(tǒng)API讀取tick時(shí),當(dāng)前硬件計(jì)數(shù)器的值與上一次讀取時(shí)硬件計(jì)數(shù)器的值的差值就是兩次讀取之間已經(jīng)過去的tick數(shù)。當(dāng)實(shí)時(shí)時(shí)鐘產(chǎn)生中斷時(shí),即硬件計(jì)數(shù)器計(jì)到0,將此變量清零。
這樣,就可以保證每次讀取系統(tǒng)tick 時(shí),能得到一個準(zhǔn)確的系統(tǒng)tick值。當(dāng)有任務(wù)要主動延時(shí)一段時(shí)間,即調(diào)用系統(tǒng)delay API時(shí)。ECOS的API函數(shù)會計(jì)算出該任務(wù)的delay時(shí)間點(diǎn),然后將該任務(wù)掛入系統(tǒng)delay隊(duì)列。然后遍歷系統(tǒng)delay隊(duì)列,找出隊(duì)列中的最小delay時(shí)間點(diǎn),把該delay時(shí)間點(diǎn)對應(yīng)的delay時(shí)間寫入GPT,讓GPT來控制delay時(shí)間。delay時(shí)間到后,GPT會產(chǎn)生中斷,ECOS將中斷處理程序分為兩部分,ISR和DSR。在ISR中將硬件計(jì)數(shù)器設(shè)為最大值。然后在DSR中增加系統(tǒng)tick,將超時(shí)的任務(wù)重新掛入就緒隊(duì)列,并且再次找出系統(tǒng)delay隊(duì)列上的最小delay時(shí)間點(diǎn),寫入硬件計(jì)數(shù)器。如果系統(tǒng)delay隊(duì)列為空,則不對硬件計(jì)數(shù)器再進(jìn)行操作,保持ISR 中寫入的最大值。最后ECOS會運(yùn)行調(diào)度器,如果超時(shí)的任務(wù)具有最高優(yōu)先級,那么它就會得到運(yùn)行,也就是醒過來。這樣也就可以保證系統(tǒng)delay的準(zhǔn)確性與及時(shí)性。下圖是修改后實(shí)時(shí)時(shí)鐘后系統(tǒng)tick, delay以及調(diào)度器相關(guān)的流程圖。
下圖是修改后實(shí)時(shí)時(shí)鐘后系統(tǒng)tick, delay以及調(diào)度器相關(guān)的流程圖。
圖1. 實(shí)時(shí)時(shí)鐘修改流程圖
下面是在飛思卡爾公司i.mx51上的實(shí)驗(yàn)數(shù)據(jù)。
可以看出,修改了時(shí)間片調(diào)度和實(shí)時(shí)時(shí)鐘后,不論ARM工作在哪個電壓點(diǎn),系統(tǒng)IDLE時(shí)的功耗降低了差不多10倍。因此,延長實(shí)時(shí)時(shí)鐘中斷間隔能極大的降低系統(tǒng)功耗。
4.其他系統(tǒng)的類似方法
當(dāng)前流行的嵌入式操作系統(tǒng)Linux和WinCE也都在討論修改系統(tǒng)實(shí)時(shí)時(shí)鐘中斷方式以求降低系統(tǒng)功耗。對于Linux系統(tǒng),有一個Less Watts項(xiàng)目,實(shí)現(xiàn)tickless idle,即無tick的idle,其實(shí)就是修改實(shí)時(shí)時(shí)鐘的中斷方式。WinCE則提供了可變系統(tǒng)時(shí)鐘節(jié)拍Variable Tick Scheduler,在進(jìn)入idle狀態(tài)前改變系統(tǒng)時(shí)鐘節(jié)拍,這樣在預(yù)期的時(shí)間段里,idle狀態(tài)不會被無謂的系統(tǒng)時(shí)鐘中斷喚醒。
5.結(jié)論
可以看出,通過修改實(shí)時(shí)時(shí)鐘中斷方式,可以使CPU在idle狀態(tài)下長時(shí)間處于低功耗模式,極大的降低系統(tǒng)功耗。而且當(dāng)前流行的嵌入式操作系統(tǒng)都在積極的探討此方法。相信今后這項(xiàng)功能會成為嵌入式操作系統(tǒng)必備的一個功能。
特別推薦
- 授權(quán)代理商貿(mào)澤電子供應(yīng)Same Sky多樣化電子元器件
- 使用合適的窗口電壓監(jiān)控器優(yōu)化系統(tǒng)設(shè)計(jì)
- ADI電機(jī)運(yùn)動控制解決方案 驅(qū)動智能運(yùn)動新時(shí)代
- 倍福推出采用 TwinSAFE SC 技術(shù)的 EtherCAT 端子模塊 EL3453-0090
- TDK推出新的X系列環(huán)保型SMD壓敏電阻
- Vishay 推出新款采用0102、0204和 0207封裝的精密薄膜MELF電阻
- Microchip推出新款交鑰匙電容式觸摸控制器產(chǎn)品 MTCH2120
技術(shù)文章更多>>
- 更高精度、更低噪音 GMCC美芝電子膨脹閥以創(chuàng)新?lián)屨夹袠I(yè)“制高點(diǎn)”
- 本立租完成近億元估值Pre-A輪融資,打造AI賦能的租賃服務(wù)平臺
- 中微公司成功從美國國防部中國軍事企業(yè)清單中移除
- 華邦電子白皮書:滿足歐盟無線電設(shè)備指令(RED)信息安全標(biāo)準(zhǔn)
- 功率器件熱設(shè)計(jì)基礎(chǔ)(九)——功率半導(dǎo)體模塊的熱擴(kuò)散
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
單向可控硅
刀開關(guān)
等離子顯示屏
低頻電感
低通濾波器
低音炮電路
滌綸電容
點(diǎn)膠設(shè)備
電池
電池管理系統(tǒng)
電磁蜂鳴器
電磁兼容
電磁爐危害
電動車
電動工具
電動汽車
電感
電工電路
電機(jī)控制
電解電容
電纜連接器
電力電子
電力繼電器
電力線通信
電流保險(xiǎn)絲
電流表
電流傳感器
電流互感器
電路保護(hù)
電路圖