<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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


測試結果如表4所列。


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

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

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

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

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

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

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

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

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

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



結語(yǔ)

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

上一頁(yè) 1 2 3 下一頁(yè)

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

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>