<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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


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


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

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

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

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

          ①對(duì)計(jì)數(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等。

          ②對(duì)循環(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ā)現(xiàn)μC/OS-II在設(shè)計(jì)時(shí)已考慮到該問(wèn)題,多數(shù)循環(huán)使用while實(shí)現(xiàn)。在此只對(duì)OSInit()函數(shù)改進(jìn),同時(shí)μC/OS-II中固定的任務(wù)(如OS_TaskIdle、OS_TaskStat中的控制)改為goto語(yǔ)句,減少應(yīng)用程序的功耗。

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

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

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

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



          結(jié)語(yǔ)

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

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

          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();