創(chuàng)建基準用于比較優(yōu)化結果的必要性顯而易見,令人驚訝的是開發(fā)團隊常常在沒有任何基準的情況下匆忙開展優(yōu)化。基準測量很重要,因為每次優(yōu)化得到的改進會越來越小。舉例來說,遍能耗優(yōu)化可能有20%的改進,第二次有10%,第三次5%,以此類推。開發(fā)人員應了解這種趨勢,并將他們在系統(tǒng)中獲得的改進量化為輸入次數(shù)的函數(shù)。
技巧2—設定優(yōu)化目標
每一次優(yōu)化都比前一次需要更多的時間才能從系統(tǒng)中獲得極少量的改進。開發(fā)團隊需要仔細平衡他們的時間投入,并根據(jù)改進結果判斷是否值得花這么多時間。一味悶頭做事很容易沉迷,可能花了數(shù)周時間才認識到自己在優(yōu)化一個不再需要優(yōu)化的系統(tǒng)。因此在優(yōu)化開始之前,開發(fā)團隊應設定一個目標值,達到這個目標,就表示優(yōu)化結果對當前應用來說足夠好,優(yōu)化過程已經完成。
技巧3—使用正確的測量工具
如果沒有合適的測量工具,優(yōu)化一個系統(tǒng)是很困難的。舉例來說,如果不使用一種精確的方法來測量系統(tǒng)和微控制器的能耗,便很難完成能耗的優(yōu)化。開發(fā)人員經常無法區(qū)分這兩種不同的能量測量,他們試圖減少實際上無法再減少的微控制器能耗。
對性能優(yōu)化感興趣的開發(fā)人員可以看一看我在“親自動手:Segger系統(tǒng)查看工具”中介紹的Segger系統(tǒng)查看工具,這款工具對于了解哪些 函數(shù)正在獨占CPU非常有用。如果沒有能夠精確測量或可供開發(fā)人員查看系統(tǒng)行為的工具,那么在優(yōu)化系統(tǒng)時便抓不住重點。
技巧4—使用優(yōu)化工具
為了減小代碼大小或提高性能,嵌入式軟件的許多方面都可以優(yōu)化。一些情況下可以使用獨立的或附屬的工具鏈。Somnium DRT優(yōu)化器就是一種很好的優(yōu)化工具,可以與GCC一起用來優(yōu)化代碼大小、能量使用率和性能。
不過有時候外部工具可能不是必需的,只要選擇正確的工具鏈就足夠了。在Coremark測試中,對于相同的微控制器和相同的測試條件,商用編譯器的得分總是高于GCC等開源編譯器。
技巧5—使用編譯器屬性和#pragma指令
一般很不喜歡用#pragma指令或編譯器屬性。屬性和#pragma指令通常是不可移植的,改變編譯器可能會造成軟件缺陷。然而,在調整嵌入式軟件時,開發(fā)人員通常沒有選擇。使用屬性和#pragma指令可以提高速度,并能根據(jù)實際情況有選擇地優(yōu)化某個功能。基于這些理由,想要優(yōu)化軟件的開發(fā)人員應該熟悉屬性的使用,這樣他們才知道如何編寫出可移植的程序,并且沒有負面影響。
技巧6—多做實驗
在優(yōu)化系統(tǒng)方面沒有一成不變的方法,開發(fā)人員不應該局限于任何一種特殊的技術。有時候學習和優(yōu)化系統(tǒng)的方法是嘗試各種實驗并分析其結果。
為了低功耗而優(yōu)化系統(tǒng)時,做了很多實驗,也出現(xiàn)了一些錯誤。通過實驗過程和所記錄的結果,我就能夠理解什么有用,什么沒用,以及做哪些事是在浪費資源和時間。如何地利用printf就是一個簡單的例子: 通過嘗試不同的驅動模型可以發(fā)現(xiàn),很多方法都可以顯著提高開發(fā)人員使用printf時獲得的實時性能,而人們設想的結果通常遠好于真實結果。
技巧7—深入研究編譯器產生的指令
在資源特別有限的應用中,開發(fā)人員有時只需挽起袖子深入理解編譯器產生的指令。在將要執(zhí)行的三四個廣義指令間選擇三元操作符而不是if/else是有區(qū)別的,這很可能會導致應用程序崩潰。
以上就是粵嵌科技的小編給大家整理的關于嵌入式技巧優(yōu)化的內容,希望對大家有一定的幫助,如果說對于嵌入式技術你有遇到什么樣的難題的話,可以點擊咨詢我們的在線客服,會有專業(yè)的講師給你進行解答。想要學習嵌入式技術的話也可以來我們公司進行實地考察,或者是點擊我們文章下面的獲取試聽資格按鈕來獲取我們的嵌入式培訓免費課程試聽資格,來和我們的講師進行面對面的交流和溝通。