一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

采用源程序級和算法級對μC/OS-II進行源碼級的功耗優(yōu)化

電子設(shè)計 ? 來源:單片機與嵌入式系統(tǒng)應(yīng)用 ? 作者:廖海艷 , 范明明 ? 2020-09-09 18:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

引言

軟件設(shè)計中,代碼優(yōu)化是一件非常有意義的事情。優(yōu)化的本質(zhì)是對代碼進行等價變換,使變換前后的代碼運行結(jié)果相同,但變換后的代碼比變換前的代碼具有更多優(yōu)越性能。傳統(tǒng)的觀點要求變換后的代碼運行速度較快或占用較少運行資源,或二者兼?zhèn)?。隨著嵌人式系統(tǒng)的快速發(fā)展,軟件功耗問題顯得越來越重要,應(yīng)該將“省電”作為軟件優(yōu)化的一項技術(shù)指標(biāo),這樣對軟件優(yōu)化的評價體系才算完整。值得注意的是,大多數(shù)情況下性能和功耗并不矛盾,減少程序執(zhí)行時間同樣會使程序功耗減少。

在功耗優(yōu)化這個問題上,研究者普遍比較關(guān)注硬件功耗優(yōu)化,應(yīng)用各種技術(shù)想方設(shè)法改進硬件的功耗,比如在芯片制造工藝上采用更精細的納米技術(shù),不斷降低芯片驅(qū)動電壓,不斷改變片內(nèi)系統(tǒng)結(jié)構(gòu)等。事實上,整個系統(tǒng)的運行管理是由軟件體現(xiàn)的。在硬件基礎(chǔ)一定的情況下,只有將軟件系統(tǒng)對能量的損耗降至最小,才能使整個系統(tǒng)工作于最佳狀態(tài)。面向功耗的軟件優(yōu)化方法是當(dāng)前嵌入式系統(tǒng)低功耗研究領(lǐng)域的熱點。掌握軟件運行時的能量消耗特征、準(zhǔn)確獲取能量消耗數(shù)據(jù)信息,是面向低功耗的軟件優(yōu)化研究的前提。經(jīng)過多年的努力,許多學(xué)者也提出了關(guān)于如何減少軟件功耗的方法。研究表明,軟件優(yōu)化對降低功耗會有數(shù)量級的貢獻。針對同一任務(wù),所選擇的算法不同或采用不同的實現(xiàn)方式,不僅性能有差別,能耗也大不一樣。因此在進行系統(tǒng)優(yōu)化設(shè)計時,除了代碼的規(guī)模和執(zhí)行性能之外,功耗也是一個需要認真考慮的問題。

1 軟件功耗優(yōu)化方法

常用的軟件功耗優(yōu)化方法大致可分為以下4類:

(1)軟件體系結(jié)構(gòu)級

不存在沒有體系結(jié)構(gòu)的軟件。通常考慮軟件體系結(jié)構(gòu)都是注重軟件的可修改性、可重用性和可靠性等問題,軟件體系結(jié)構(gòu)的好壞直接關(guān)系到軟件性能的好壞。而且前,關(guān)于軟件體系結(jié)構(gòu)對軟件功耗影響這方面的研究較少,用不同軟件體系結(jié)構(gòu)開發(fā)出的軟件功耗會有差異,怎樣選擇合適的軟件體系結(jié)構(gòu)使軟件功耗最小化,將成為軟件低功耗優(yōu)化的重要研究方向。

(2)源程序級

C語言的源程序級功耗優(yōu)化指的是實現(xiàn)同一功能的不同語句間的選擇。比如,同樣實現(xiàn)循環(huán)功能,有多種選擇(for、while、goto等)。這些語句的功耗會有差異,為了實現(xiàn)低功耗的軟件,應(yīng)采用功耗最低的語句來完成相同的功能。這就需要對所有語句的功耗進行測試與研究。同時,對C語言不同數(shù)據(jù)類型操作的功耗進行分析。比如,同樣表示數(shù)目,可以用8位int型、16位int型和32位int型。再者,對不同變量的存儲類型功耗也要進行分析,如寄存器變量、靜態(tài)變量、自動變量等??傊?,在源碼級對軟件功耗進行優(yōu)化是一個重要的研究方向。

(3) 算法級

算法是為解決某個特定問題而定義的無二義性的操作序列,算法復(fù)雜性分析就是對算法運行時所消耗的計算機資源作量化的分析和預(yù)測。以往,程序設(shè)計者關(guān)心的資源主要是運行時間和存儲空間。由于能量消耗已成為軟件設(shè)計中的關(guān)鍵約束條件,因此本文將能耗作為一項重要資源,對算法運行時所消耗的能量進行分析和比較。

(4)編譯級

對于某個硬件來說,執(zhí)行程序所產(chǎn)生的功耗取決于它的機器代碼,而機器代碼是從源代碼編譯而來的,這就說明編譯過程也影響了硬件的功耗。既然編譯器可以很大程度上控制硬件的運行軌跡,除了性能這一傳統(tǒng)的優(yōu)化目標(biāo)之外,編譯器也可以通過適當(dāng)?shù)恼{(diào)度優(yōu)化,使得硬件執(zhí)行某一個程序時的功耗變小。國際上對于低功耗編譯的歷史并不長,是從20世紀(jì)90年代初才開始研究的,這方面的文章最早出現(xiàn)于文獻 [4-5],Tiwari等人在這些文章中提出了對軟件進行功耗分析的一些基本概念,建立了基本的指令級功耗模型,以486DX為例初步探討了低功耗編譯技術(shù)。

本文主要從源程序級和算法級這兩個方面對軟件功耗特征進行測試與分析,并根據(jù)分析結(jié)果對μC/OS-II進行源碼級的功耗優(yōu)化。

2 源碼級和算法級的功耗測試

測試環(huán)境是T.K.Tan等人研發(fā)的EMSIM,它是一個基于指令級的嵌入式軟件功耗模擬器,其主要的功耗估算思想是累計函數(shù)中所有單條指令的功耗作為該函數(shù)的總功耗。嵌入式硬件平臺是ARM公司的StrongARM110。EMSIM測試功耗的單位為函數(shù),即它只能測試某個函數(shù)的功耗。在本文的測試中,將要測試的語句放入函數(shù)中,測得整個函數(shù)的功耗,記為E1,然后測試同樣參數(shù)及返回值的空語句函數(shù)的功耗,記為 E2,最后計算得到語句的功耗為:E=E1-E2。

2.1源碼級的功耗測試

本小節(jié)對C語言的源碼級功耗進行測試,測試過程分為以下幾步:

①對每種數(shù)據(jù)類型的不同操作的功耗進行測試。要測試8位整型、16位整型、32位整型以及32位浮點型和64位浮點型的基本操作功耗?;静僮饔校杭?、減、乘、除、取余、賦值、移位、與、或、非。此處測試的結(jié)果與處理器的位數(shù)有關(guān),StrongARM110為32位精簡指令集系統(tǒng),在此基礎(chǔ)上測試的結(jié)果如表1所列。

采用源程序級和算法級對μC/OS-II進行源碼級的功耗優(yōu)化

從表1可知,對于相同數(shù)據(jù)類型,加、減、乘、除和取余操作的功耗一樣,與、或、非操作的功耗一樣,而移位功耗最低。對于不同數(shù)據(jù)類型來說,32位數(shù)比16位數(shù)的操作功耗低,16位數(shù)比8位數(shù)的操作功耗低。32位浮點數(shù)與32位整形數(shù)的操作功耗一樣。在所有數(shù)據(jù)類型中64位浮點數(shù)的操作功耗最高。

測試環(huán)境的處理器StrongARM110為32位處理器,對8位數(shù)和16位數(shù)的處理要考慮字節(jié)對齊問題,而對32位就不用考慮該問題。

②對函數(shù)、內(nèi)聯(lián)函數(shù)和宏定義的功耗進行測試。如表2所列,內(nèi)聯(lián)函數(shù)和宏定義的功耗比一般函數(shù)的功耗低,CPU周期數(shù)及指令數(shù)也小。

③對相同功能不同實現(xiàn)語句的功耗進行測試。主要針對循環(huán)語句、選擇語句(二元和多元)、乘法、移位、除法、移位進行測試,測試結(jié)果如表3所列。

從表3可知,同樣實現(xiàn)循環(huán)功能,for循環(huán)的功耗比while、goto的要大,goto語句的功耗明顯最低;二元選擇運算中三目運算比if語句的功耗低,但是只能在單條賦值語句中使用三目運算,在復(fù)雜的多條語句的情況下,兩者功耗一樣;多元選擇運算中,switch語句比if…elseif…語句功耗低;寄存器變量的操作比自動變量的操作功耗低近50%,因為處理器從寄存器里直接讀取變量省去了反復(fù)從內(nèi)存讀取變量的過程,從而達到降低功耗的目的。

2.2算法級功耗測試

算法級功耗測試是比源碼級功耗測試更高一層次的測試,不同的算法針對同一問題的考慮方面不同,如可靠性、易用性、時間復(fù)雜度、空間復(fù)雜度、功耗等。以往對軟件算法的研究著重在性能上面,本文把功耗作為主要考慮對象,研究算法對功耗的影響。為了便于討論,本文提出一具體問題,針對該問題提出5種不同的算法,然后分析這些算法對軟件功耗的影響。

問題描述:對于1字節(jié)的變量v,求其二進制表示中1的個數(shù)。

算法1:用除法和取余實現(xiàn)。對于二進制操作,除以 2,原來的數(shù)將會減少1個0,如果在除的過程中有余,就表示當(dāng)前位置為1。

算法2:使用與&(即移位》》)操作。&操作,把8位數(shù)字v與00000001進行與操作,如果結(jié)果為1,表示當(dāng)前8位的最后1位為1,否則為0,然后再將v右移1位,循環(huán)進行。

算法3:使用與&操作,僅考慮v中1的個數(shù)。

算法4:使用分支操作,直接把0~255的情況都羅列出來,使用switch…case…,即可得到答案。

算法5:使用查表法,將0~255中1的個數(shù)直接存儲在數(shù)組Array中,v作為數(shù)組的下標(biāo),則Array[v]就是v中1 的個數(shù)。

測試結(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ù)類型的改進。由表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)控制語句的改進。由表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ù)改進,同時μ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功耗更大。處理器進入子程序時,會首先將當(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ù)變量,將其聲明為寄存器變量,降耗效果明顯。

⑤算法級的改進。從算法級功耗的算法5可以看出,將一些運算的結(jié)果預(yù)先算好,放在Flash 中,用查表的方法替代實時的計算,減少微控制器的運算工作量,可以有效地降低微控制器的功耗;不可避免的實時計算,達到精度就結(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ù)進行源碼級功耗優(yōu)化,其優(yōu)化前后的結(jié)果如圖1所示。圖中,縱軸表示能耗(nJ),橫軸表示改進前后的功能函數(shù)。

結(jié)語

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

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 測試
    +關(guān)注

    關(guān)注

    8

    文章

    5680

    瀏覽量

    128698
  • 嵌入式
    +關(guān)注

    關(guān)注

    5148

    文章

    19634

    瀏覽量

    316816
  • 納米
    +關(guān)注

    關(guān)注

    2

    文章

    709

    瀏覽量

    38718
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    μC/OS-II的特點

    的需要對它進行修改。缺點在于它缺乏必要的支持,沒有功能強大的軟件包,用戶通常需要自己編寫驅(qū)動程序,特別是如果用戶使用的是不太常用的單片機,還必須自己編寫移植程序。2.μC/
    發(fā)表于 07-15 14:51

    uC/OS-II簡介

    《嵌入式系統(tǒng)編程》雜志的5 月和6 月刊上刊登的文章連載,并把μC/OS源碼發(fā)布在該雜志的B B S 上。μC/OS 和μ
    發(fā)表于 10-08 09:11

    uC/OS-II簡介

    《嵌入式系統(tǒng)編程》雜志的5 月和6 月刊上刊登的文章連載,并把μC/OS源碼發(fā)布在該雜志的B B S 上。μC/OS 和μ
    發(fā)表于 10-11 09:26

    uC/OS-II簡介

    《嵌入式系統(tǒng)編程》雜志的5 月和6 月刊上刊登的文章連載,并把μC/OS源碼發(fā)布在該雜志的B B S 上。μC/OS 和μ
    發(fā)表于 10-15 11:03

    uC/OS-II簡介

    《嵌入式系統(tǒng)編程》雜志的5 月和6 月刊上刊登的文章連載,并把μC/OS源碼發(fā)布在該雜志的B B S 上。μC/OS 和μ
    發(fā)表于 10-20 09:35

    uC/OS-II簡介

    《嵌入式系統(tǒng)編程》雜志的5 月和6 月刊上刊登的文章連載,并把μC/OS源碼發(fā)布在該雜志的B B S 上。μC/OS 和μ
    發(fā)表于 10-25 09:59

    uC/OS-II簡介

    《嵌入式系統(tǒng)編程》雜志的5 月和6 月刊上刊登的文章連載,并把μC/OS源碼發(fā)布在該雜志的B B S 上。μC/OS 和μ
    發(fā)表于 10-27 09:29

    適用于μC/OS-II的低功耗模式

    系統(tǒng)功耗,是一個值得探討的問題。一般來說,嵌入式CPU都具有低功耗的工作模式,如果在任務(wù)調(diào)度的空閑時間,使CPU進入這種模式,就能大幅度降低系統(tǒng)功耗。本文以嵌入式實時操作系統(tǒng)μC/
    發(fā)表于 04-28 09:57

    如何去解決uC/OS-II中優(yōu)先翻轉(zhuǎn)問題?

    uC/OS-II的運行機制是什么?uC/OS-II中的優(yōu)先翻轉(zhuǎn)問題有哪些?如何去解決uC/OS-II中優(yōu)先翻轉(zhuǎn)問題?
    發(fā)表于 04-25 07:07

    μC/OS-II是什么?μC/OS-II有哪些應(yīng)用?

    μC/OS-II的原理是什么?如何去改進μC/OS-II的調(diào)度算法?μC/
    發(fā)表于 04-26 07:17

    在μC OS-II中實現(xiàn)同優(yōu)先調(diào)度的方法

    在μC/OS-II中實現(xiàn)同優(yōu)先調(diào)度的方法
    發(fā)表于 05-16 15:05 ?23次下載

    基于μC/OS-II的無線調(diào)度策略分析與實現(xiàn)

    介紹了基于嵌入式實時操作系統(tǒng)μC/OS-II 的無線調(diào)度平臺調(diào)度機制,根據(jù)μC/OS-II的特點對調(diào)度任務(wù)進行了合理劃分,并對多任務(wù)優(yōu)先
    發(fā)表于 08-31 10:42 ?12次下載

    μC/OS-II的多任務(wù)系統(tǒng)實時性分析與優(yōu)先分配

    μC/OS-II的多任務(wù)系統(tǒng)實時性分析與優(yōu)先分配 從產(chǎn)品研發(fā)的角度,針對小資源系統(tǒng)中使用μC/OS-II的實時性和優(yōu)先
    發(fā)表于 03-29 15:12 ?1132次閱讀
    μ<b class='flag-5'>C</b>/<b class='flag-5'>OS-II</b>的多任務(wù)系統(tǒng)實時性分析與優(yōu)先<b class='flag-5'>級</b>分配

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

    源碼算法功耗測試與優(yōu)化 引言軟件設(shè)計中,代碼優(yōu)化
    發(fā)表于 03-13 10:59 ?1248次閱讀
    <b class='flag-5'>源碼</b><b class='flag-5'>級</b>和<b class='flag-5'>算法</b><b class='flag-5'>級</b>的<b class='flag-5'>功耗</b>測試與<b class='flag-5'>優(yōu)化</b>

    uC/OS-II中優(yōu)先翻轉(zhuǎn)問題

    本文著重分析優(yōu)先翻轉(zhuǎn)問題的產(chǎn)生和影響,以及在uC/OS-II中的解決方案,在嵌入式系統(tǒng)的應(yīng)用中,實時性是一個重要的指標(biāo),而優(yōu)先翻轉(zhuǎn)是影響系統(tǒng)實時性的重要問題
    發(fā)表于 01-06 16:53 ?2560次閱讀