新聞中心

EEPW首頁 > 測試測量 > 設(shè)計應(yīng)用 > 源碼級和算法級的功耗測試與優(yōu)化

源碼級和算法級的功耗測試與優(yōu)化

作者: 時間:2010-03-12 來源:網(wǎng)絡(luò) 收藏


測試結(jié)果如表4所列。


其中,M是v中1的個數(shù),log2v為v的位數(shù)。

由表4可知,算法1~5的執(zhí)行效率越來越高,算法5的查表法比算法1節(jié)省80%的功耗,其CPU周期數(shù)也相應(yīng)減少,但是它們的指令數(shù)卻有所增加,所以算法5的查表法是以空間換取時間和功耗的算法。在內(nèi)存充分大的嵌入式系統(tǒng)中,為盡量降低功耗,算法5是很好的選擇。

3 μC/OS-II的功耗優(yōu)化

μC/OS-II是一種可移植、可固化、可裁減及可剝奪型的多任務(wù)實時內(nèi)核(RTOS),適用于各種微處理器和微控制器。所有代碼用ANSI C語言編寫,具有良好的可移植性。對μC/OS-II的功耗優(yōu)化分以下幾步實行:

①對計數(shù)器數(shù)據(jù)類型的改進(jìn)。由表1可知,32位數(shù)據(jù)類型的加1操作比8位數(shù)據(jù)類型的加1操作能耗低27nJ,將μC/OS-II中常用數(shù)據(jù)的數(shù)據(jù)類型改為INT32U,如任務(wù)控制塊OS_TCB中的prio、OSTCBDly、OSTCBX、OSTCBY、OSTCBBitX、OSTCBBitY等。

②對循環(huán)控制語句的改進(jìn)。由表3可知,while、goto循環(huán)語句的功耗比for循環(huán)語句的功耗低。將μC/OS-II中for循環(huán)句換成while循環(huán)語句,經(jīng)查看μC/OS-II的源碼,發(fā)現(xiàn)μC/OS-II在設(shè)計時已考慮到該問題,多數(shù)循環(huán)使用while實現(xiàn)。在此只對OSInit()函數(shù)改進(jìn),同時μC/OS-II中固定的任務(wù)(如OS_TaskIdle、OS_TaskStat中的控制)改為goto語句,減少應(yīng)用程序的功耗。

③對內(nèi)聯(lián)函數(shù)和宏的使用。對簡短的常用函數(shù)加上inline關(guān)鍵字,或用宏來實現(xiàn),內(nèi)聯(lián)函數(shù)和宏的使用使軟件功耗降低。讀RAM比讀Flash功耗更大。處理器進(jìn)入子程序時,會首先將當(dāng)前處理器的寄存器推入堆棧(RAM),在離開時又將處理器的寄存器彈出堆棧,這樣至少兩次對RAM操作。而宏在編譯時展開,處理器順序執(zhí)行指令,避免了調(diào)用子程序,同時減少了系統(tǒng)的功耗。μC/OS-II中常用的短函數(shù)改為內(nèi)聯(lián)函數(shù),如每個時鐘都要執(zhí)行的OSTimeTick()和開關(guān)中斷等,同時μC/OS-II中采用條件編譯,也會在一定程度上降低功耗。

④對變量存儲類型的優(yōu)化。對于大部分嵌入式系統(tǒng)來說,為了提高運行速度,通常寄存器做得很大,如ARM系列處理器有31個通用寄存器。有時許多寄存器空著沒使用,可以將程序中常用的常量或變量直接置于寄存器中,而不是置于內(nèi)存的靜態(tài)存儲區(qū)或動態(tài)存儲區(qū)中。這樣做不僅提高了軟件運行速度,而且也節(jié)省能量消耗。由表3可知,使用寄存器變量能省近50%的功耗,μC/OS-II中每個時鐘周期都要使用的計數(shù)變量OSTime,將其用關(guān)鍵字register聲明即可。還有循環(huán)控制語句的計數(shù)變量,將其聲明為寄存器變量,降耗效果明顯。

的改進(jìn)。從功耗的算法5可以看出,將一些運算的結(jié)果預(yù)先算好,放在Flash中,用查表的方法替代實時的計算,減少微控制器的運算工作量,可以有效地降低微控制器的功耗;不可避免的實時計算,達(dá)到精度就結(jié)束,避免“過度”計算;在精度允許的情況下,使用簡單函數(shù)代替復(fù)雜函數(shù)作近似,也可以減少功耗。μC/OS-II中的任務(wù)調(diào)度和事件管理模塊都采用查找就緒表的方式來提高性能和降低功耗。為此,針對μC/OS-II的內(nèi)存管理機制采用查表算法,借用任務(wù)管理中的就緒表實現(xiàn)內(nèi)存塊的分配,這樣不但不會增加額外的空間需求,而且使內(nèi)存管理的功耗更低。

對μC/OS-II的部分功能函數(shù)進(jìn)行功耗優(yōu)化,其優(yōu)化前后的結(jié)果如圖1所示。圖中,縱軸表示能耗(nJ),橫軸表示改進(jìn)前后的功能函數(shù)。



結(jié)語

功耗較大的軟件,使用了較多功耗大的操作指令或是使用了不必要的指令。本文的創(chuàng)新之處在于,對軟件功耗優(yōu)化中的源碼級和的功耗優(yōu)化進(jìn)行分析,對用不同語句實現(xiàn)相同功能的情況進(jìn)行分類討論,測試其功耗特征,最后將與分析結(jié)果運用到嵌入式操作系統(tǒng)μC/OS-II中,對其進(jìn)行源碼級的功耗優(yōu)化,實驗結(jié)果證明,源碼級的功耗優(yōu)化能明顯降低軟件的功耗。

上一頁 1 2 3 下一頁

關(guān)鍵詞: 源碼級 算法級 功耗測試

評論


技術(shù)專區(qū)

關(guān)閉