新聞中心

        EEPW首頁 > 測試測量 > 設計應用 > 源碼級和算法級的功耗測試與優化

        源碼級和算法級的功耗測試與優化

        作者: 時間:2010-03-12 來源:網絡 收藏


        測試結果如表4所列。


        其中,M是v中1的個數,log2v為v的位數。

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

        3 μC/OS-II的功耗優化

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

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

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

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

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

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

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



        結語

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

        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 灌云县| 嘉峪关市| 固安县| 内乡县| 太湖县| 陕西省| 繁昌县| 林周县| 曲阳县| 新余市| 丰都县| 屏东市| 阿合奇县| 洪江市| 乡城县| 巴青县| 钟山县| 湖北省| 永泰县| 封开县| 南昌县| 故城县| 左贡县| 信宜市| 栾川县| 五大连池市| 平阴县| 佳木斯市| 毕节市| 平武县| 东台市| 田阳县| 阜新| 封丘县| 卓尼县| 响水县| 丹阳市| 远安县| 益阳市| 治县。| 黔西县|