時間:2019-06-11 00:00:00 來源:信盈達(dá) 作者:信盈達(dá)
早前曾討論過在許多情況下需要優(yōu)化的嵌入式系統(tǒng)的關(guān)鍵特征,包括系統(tǒng)時序、代碼大小、RAM使用率和能耗。雖然優(yōu)化每個特征通常要求不同的方法和技術(shù),但開發(fā)人員在優(yōu)化嵌入式軟件時可以遵循幾個通用技巧。
創(chuàng)建基準(zhǔn)用于比較優(yōu)化結(jié)果的必要性顯而易見,令人驚訝的是開發(fā)團(tuán)隊常常在沒有任何基準(zhǔn)的情況下匆忙開展優(yōu)化。基準(zhǔn)測量很重要,因為每次優(yōu)化得到的改進(jìn)會越來越小。舉例來說,第一遍能耗優(yōu)化可能有20%的改進(jìn),第二次有10%,第三次5%,以此類推。開發(fā)人員應(yīng)了解這種趨勢,并將他們在系統(tǒng)中獲得的改進(jìn)量化為輸入次數(shù)的函數(shù)。
技巧2—設(shè)定優(yōu)化目標(biāo)
每一次優(yōu)化都比前一次需要更多的時間才能從系統(tǒng)中獲得極少量的改進(jìn)。開發(fā)團(tuán)隊需要仔細(xì)平衡他們的時間投入,并根據(jù)改進(jìn)結(jié)果判斷是否值得花這么多時間。一味悶頭做事很容易沉迷,可能花了數(shù)周時間才認(rèn)識到自己在優(yōu)化一個不再需要優(yōu)化的系統(tǒng)。因此在優(yōu)化開始之前,開發(fā)團(tuán)隊?wèi)?yīng)設(shè)定一個目標(biāo)值,達(dá)到這個目標(biāo),就表示優(yōu)化結(jié)果對當(dāng)前應(yīng)用來說足夠好,優(yōu)化過程已經(jīng)完成。
技巧3—使用正確的測量工具
如果沒有合適的測量工具,優(yōu)化一個系統(tǒng)是很困難的。舉例來說,如果不使用一種精確的方法來測量系統(tǒng)和微控制器的能耗,便很難完成能耗的優(yōu)化。開發(fā)人員經(jīng)常無法區(qū)分這兩種不同的能量測量,他們試圖減少實際上無法再減少的微控制器能耗。
技巧4—使用優(yōu)化工具
為了減小代碼大小或提高性能,嵌入式軟件的許多方面都可以優(yōu)化。一些情況下可以使用獨立的或附屬的工具鏈。Somnium DRT優(yōu)化器就是一種很好的優(yōu)化工具,可以與GCC一起用來優(yōu)化代碼大小、能量使用率和性能。不過有時候外部工具可能不是必需的,只要選擇正確的工具鏈就足夠了。
技巧5—使用編譯器屬性和#pragma指令
我一般很不喜歡用#pragma指令或編譯器屬性。屬性和#pragma指令通常是不可移植的,改變編譯器可能會造成軟件缺陷。然而,在調(diào)整嵌入式軟件時,開發(fā)人員通常沒有選擇。使用屬性和#pragma指令可以提高速度,并能根據(jù)實際情況有選擇地優(yōu)化某個功能。
技巧6—多做實驗
在優(yōu)化系統(tǒng)方面沒有一成不變的方法,開發(fā)人員不應(yīng)該局限于任何一種特殊的技術(shù)。有時候?qū)W習(xí)和優(yōu)化系統(tǒng)的最好方法是嘗試各種實驗并分析其結(jié)果。
技巧7—深入研究編譯器產(chǎn)生的指令
在資源特別有限的應(yīng)用中,開發(fā)人員有時只需挽起袖子深入理解編譯器產(chǎn)生的指令。在將要執(zhí)行的三四個廣義指令間選擇三元操作符而不是if/else是有區(qū)別的,這很可能會導(dǎo)致應(yīng)用程序崩潰。
雖然像C這樣的語言是標(biāo)準(zhǔn)的,但每種編譯器在優(yōu)化和產(chǎn)生機(jī)器指令時有少許差異。唯一現(xiàn)實的方法是檢查匯編語言,了解編譯器在做什么。
不同應(yīng)用程序的優(yōu)化需求各不相同。小批量產(chǎn)生的應(yīng)用程序也許根本不需要優(yōu)化;而對于另外一些應(yīng)用程序,每個時鐘周期或每毫微安電流都很重要,則可能需要開發(fā)人員花大量時間從系統(tǒng)中榨出最后一點性能或能量。雖然每種系統(tǒng)都是不同的,但開發(fā)人員若熟記這些技巧,便為實現(xiàn)更高效的系統(tǒng)邁出了可喜的第一步。
免費領(lǐng)取試聽卡
申請已經(jīng)提交
老師會馬上給您安排試聽課程!
申請出錯了
您可以加老師QQ:914865590報名咨詢!