優化嵌入式軟體的特性包括系統時序,**大小,ram使用和能耗等。雖然優化每個特性通常都需要自己的方法和技術,但開發人員在優化嵌入式軟體時可以遵循幾個一般性提示。
始終建立比較基線
首先建立乙個比較優化結果的基線是顯而易見的,但是我們也能發現很多團隊是匆忙地直接進入優化而沒有任何基線。基線測量很重要,因為每個優化週期的回報都會減少。例如,優化能量的第一次通過可以導致20%的改善。第二10%,然後是5%,依此類推。開發人員需要能夠看到這種趨勢,並根據他們的時間輸入量化他們在系統中看到的改進。
設定優化目標
每次優化過程都需要越來越多的時間來從系統中擠出最小的改進。團隊需要仔細平衡他們的時間投資,並確定最終的改進是否值得花時間。在意識到這一點之前,可以花費數週來優化不再需要優化的系統。在優化開始之前,團隊應該設定乙個目標,一旦實現,就足以滿足當前應用程式的要求。實現該目標表明優化過程已完成。
獲取正確的工具進行測量
沒有正確的測量工具,優化系統可能非常困難。例如,如果沒有準確的方法來測量系統和微控制器能量消耗,則無法優化能量。在許多情況下,團隊無法將這兩種不同的能量測量結果分開,並試圖在微控制器無法降低時將其最小化。如果沒有可以準確測量或允許開發人員檢視系統行為的工具,那麼嘗試優化系統是沒有意義的。
使用優化工具
嵌入式軟體有許多領域可以進行優化,以減少**大小或提高效能。在某些情況下,可以使用單獨的或附加的工具鏈來執行優化。但有時可能不需要外部工具。只選擇合適的工具鏈就足夠了。
使用編譯器屬性和#pragma
在微調嵌入式軟體時,開發人員通常無法做出選擇。使用屬性和#pragma可以提高速度,有選擇地將優化應用於單個函式,致力於優化軟體的開發人員應該熟悉屬性,還要閱讀用c編寫可移植優化,以便他們能夠理解如何編寫仍然可移植的優化,並且不會再回過頭來討論它們。
不要猶豫,試驗一下
沒有用於優化系統的固定實踐,開發人員不應該感到受限於遵循任何特定技術。有時,學習和優化系統的最佳方法是將實驗放在一起,看看會發生什麼。通過實驗和記錄結果能夠弄清楚哪些有效,哪些無效,以及什麼是浪費資源和時間。通過嘗試不同的驅動程式模型,有很多方法可以大大提高開發人員在使用printf時獲得的實時效能,通常認為這比實際情況要好得多。
深入研究編譯器生成的指令
在資源極為受限的應用程式中,開發人員只需要捲起袖子並深入研究編譯器生成的指令。通過if / else選擇三元運算子可能是正在執行的三個或四個額外指令之間的差異,這會導致應用程式崩潰。雖然c等語言是標準的,但每個編譯器優化並生成機器指令的方式略有不同。了解編譯器正在做什麼的唯一真正方法是檢視程式集。
應用程式的優化需求將大不相同。一些小批量生產的應用可能根本不需要優化。在其他每個時鐘週期或奈米放大器都很重要的情況下,可能會花費大量時間來嘗試從系統中擠出最後一點效能或能量。雖然每個系統都不同,但這些技巧為開發人員和團隊提供了乙個起點,可以幫助他們實現更高效的系統。
嵌入式C語言優化小技巧
嵌入式系統是指完成一種或幾種特定功能的計算機系統,具有自動化程度高,響應速度快等優點,目前已廣泛應用於消費電子,工業控制等領域.嵌入式系統受其使用的硬體以及執行環境的限制,非常注重 的時間和空間效率,因此選擇一種合適的開發語言十分重要.目前,在嵌入式系統開發中可使用的語言很多,其中 c語言應用得最廣...
嵌入式軟體測試
嵌入式軟體測試 嵌入式軟體測試 嵌入式測試或叫交叉測試 cross test 的日的與非嵌入式軟體是相同的。但是,在嵌入式系統設計中,軟體正越來越多地取代硬體,以降低系統的成本,獲得更大的靈活性,這就需要使用更好的測試方法和工具進行嵌入式和實時軟體的測試。通常嵌入式系統對可靠性的要求比較高。嵌入式系...
嵌入式軟體自舉
etc inittab,在該檔案中又載入了rc.sysinit和rc.d等檔案。systemd init中建立乙個自啟動service。裝置操作無反應,使用者以為裝置壞掉了,並不知道需要斷電重啟,對產品質量懷疑。程式崩潰後所有功能中斷,有些重要並且需要長時間穩定執行的功能無法延續,例如 定時鬧鐘等。...