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