<ruby id="66w77"><video id="66w77"></video></ruby>
<ruby id="66w77"><option id="66w77"><thead id="66w77"></thead></option></ruby>
  • <ruby id="66w77"><table id="66w77"></table></ruby>

  • <ruby id="66w77"><table id="66w77"></table></ruby>
    <strong id="66w77"></strong>

    詳解優(yōu)化嵌入式軟件的七大技巧

    2018-09-13 15:52:35分類(lèi):行業(yè)資訊4571

      
     

      早前的專(zhuān)欄中曾討論過(guò)在許多情況下需要優(yōu)化的嵌入式系統的關(guān)鍵特征,包括系統時(shí)序、代碼大小、RAM使用率和能耗。雖然優(yōu)化每個(gè)特征通常要求不同的方法和技術(shù),但開(kāi)發(fā)人員在優(yōu)化嵌入式軟件時(shí)可以遵循幾個(gè)通用技巧。

      技巧1—總是創(chuàng )建基準用于比較

      創(chuàng )建基準用于比較優(yōu)化結果的必要性顯而易見(jiàn),令人驚訝的是開(kāi)發(fā)團隊常常在沒(méi)有任何基準的情況下匆忙開(kāi)展優(yōu)化?;鶞蕼y量很重要,因為每次優(yōu)化得到的改進(jìn)會(huì )越來(lái)越小。舉例來(lái)說(shuō),第一遍能耗優(yōu)化可能有20%的改進(jìn),第二次有10%,第三次5%,以此類(lèi)推。開(kāi)發(fā)人員應了解這種趨勢,并將他們在系統中獲得的改進(jìn)量化為輸入次數的函數。

      技巧2—設定優(yōu)化目標

      每一次優(yōu)化都比前一次需要更多的時(shí)間才能從系統中獲得極少量的改進(jìn)。開(kāi)發(fā)團隊需要仔細平衡他們的時(shí)間投入,并根據改進(jìn)結果判斷是否值得花這么多時(shí)間。一味悶頭做事很容易沉迷,可能花了數周時(shí)間才認識到自己在優(yōu)化一個(gè)不再需要優(yōu)化的系統。因此在優(yōu)化開(kāi)始之前,開(kāi)發(fā)團隊應設定一個(gè)目標值,達到這個(gè)目標,就表示優(yōu)化結果對當前應用來(lái)說(shuō)足夠好,優(yōu)化過(guò)程已經(jīng)完成。

      技巧3—使用正確的測量工具

      如果沒(méi)有合適的測量工具,優(yōu)化一個(gè)系統是很困難的。舉例來(lái)說(shuō),如果不使用一種精確的方法來(lái)測量系統和微控制器的能耗,便很難完成能耗的優(yōu)化。開(kāi)發(fā)人員經(jīng)常無(wú)法區分這兩種不同的能量測量,他們試圖減少實(shí)際上無(wú)法再減少的微控制器能耗。

      對性能優(yōu)化感興趣的開(kāi)發(fā)人員可以看一看我在“親自動(dòng)手:Segger系統查看工具”中介紹的Segger系統查看工具,這款工具對于了解哪些

      函數正在獨占CPU非常有用。如果沒(méi)有能夠精確測量或可供開(kāi)發(fā)人員查看系統行為的工具,那么在優(yōu)化系統時(shí)便抓不住重點(diǎn)。
     


     

      技巧4—使用優(yōu)化工具

      為了減小代碼大小或提高性能,嵌入式軟件的許多方面都可以?xún)?yōu)化。一些情況下可以使用獨立的或附屬的工具鏈。Somnium DRT優(yōu)化器就是一種很好的優(yōu)化工具,可以與GCC一起用來(lái)優(yōu)化代碼大小、能量使用率和性能。

      不過(guò)有時(shí)候外部工具可能不是必需的,只要選擇正確的工具鏈就足夠了。我最近寫(xiě)了一篇題為《開(kāi)源與商用編譯器》的文章,說(shuō)明了這樣一個(gè)事實(shí):在Coremark測試中,對于相同的微控制器和相同的測試條件,商用編譯器的得分總是高于GCC等開(kāi)源編譯器。

      技巧5—使用編譯器屬性和#pragma指令

      我一般很不喜歡用#pragma指令或編譯器屬性。屬性和#pragma指令通常是不可移植的,改變編譯器可能會(huì )造成軟件缺陷。然而,在調整嵌入式軟件時(shí),開(kāi)發(fā)人員通常沒(méi)有選擇。使用屬性和#pragma指令可以提高速度,并能根據實(shí)際情況有選擇地優(yōu)化某個(gè)功能?;谶@些理由,想要優(yōu)化軟件的開(kāi)發(fā)人員應該熟悉屬性的使用,而且要閱讀《用C語(yǔ)言編寫(xiě)可移植的優(yōu)化程序》,這樣他們才知道如何編寫(xiě)出可移植的最優(yōu)程序,并且沒(méi)有負面影響。

      技巧6—多做實(shí)驗

      在優(yōu)化系統方面沒(méi)有一成不變的方法,開(kāi)發(fā)人員不應該局限于任何一種特殊的技術(shù)。有時(shí)候學(xué)習和優(yōu)化系統的最好方法是嘗試各種實(shí)驗并分析其結果。

      當我首次為了低功耗而優(yōu)化系統時(shí),做了很多實(shí)驗,也出現了一些錯誤。通過(guò)實(shí)驗過(guò)程和所記錄的結果,我就能夠理解什么有用,什么沒(méi)用,以及做哪些事是在浪費資源和時(shí)間。如何最好地利用printf就是一個(gè)簡(jiǎn)單的例子: 通過(guò)嘗試不同的驅動(dòng)模型可以發(fā)現,很多方法都可以顯著(zhù)提高開(kāi)發(fā)人員使用printf時(shí)獲得的實(shí)時(shí)性能,而人們設想的結果通常遠好于真實(shí)結果。

      技巧7—深入研究編譯器產(chǎn)生的指令

      在資源特別有限的應用中,開(kāi)發(fā)人員有時(shí)只需挽起袖子深入理解編譯器產(chǎn)生的指令。在將要執行的三四個(gè)廣義指令間選擇三元操作符而不是if/else是有區別的,這很可能會(huì )導致應用程序崩潰。

      雖然像C這樣的語(yǔ)言是標準的,但每種編譯器在優(yōu)化和產(chǎn)生機器指令時(shí)有少許差異。唯一現實(shí)的方法是檢查匯編語(yǔ)言,了解編譯器在做什么。

      不同應用程序的優(yōu)化需求各不相同。小批量產(chǎn)生的應用程序也許根本不需要優(yōu)化;而對于另外一些應用程序,每個(gè)時(shí)鐘周期或每毫微安電流都很重要,則可能需要開(kāi)發(fā)人員花大量時(shí)間從系統中榨出最后一點(diǎn)性能或能量。雖然每種系統都是不同的,但開(kāi)發(fā)人員若熟記這些技巧,便為實(shí)現更高效的系統邁出了可喜的第一步。

      小結分享

      賽億方案十三年電子產(chǎn)品硬件及嵌入式軟件開(kāi)發(fā)設計經(jīng)驗,累計開(kāi)發(fā)產(chǎn)品電子應用設計完成5000多個(gè)方案設計;目前為客戶(hù)提供理念超前的手機APP開(kāi)發(fā)、智能家居系統、電子技術(shù)、電子線(xiàn)路設計、PCB設計、電路板設計、單片機技術(shù)、智能控制、嵌入式系統等。如有產(chǎn)品方案開(kāi)發(fā)意向,期待您的來(lái)訪(fǎng)。

    上一篇:下一篇:
    92视频在线精品国自产拍_乱色熟女综合一区二区_国产精品毛片久久久久久久_久天啪天天久久99久孕妇
    <ruby id="66w77"><video id="66w77"></video></ruby>
    <ruby id="66w77"><option id="66w77"><thead id="66w77"></thead></option></ruby>
  • <ruby id="66w77"><table id="66w77"></table></ruby>

  • <ruby id="66w77"><table id="66w77"></table></ruby>
    <strong id="66w77"></strong>