無論一個嵌入式系統(Embedded System)多簡單或多複雜,有5個關鍵特徵是需要開發人員特別留意的。有一些特徵顯而易見,如RAM和ROM的使用情況;還有一些特徵很容易被開發人員忽視,如系統時序和執行順序,這都將成為開發設計的隱患。

特徵1——系統時序

如果向開發人員詢問系統中斷或其他系統函數的最小、最大和平均執行時間,你有90%機率會得到翻白眼的反應。說到嵌入式系統的即時性能,許多開發人員只能在心裡禱告獲得最好的結果。如今的微控制器(MCU)已經變得非常快速和強大,但它們只是一般的運算元件,其時序並不能被完全忽略。開發人員需要瞭解多個中斷同時發生,或者用戶在同一時刻「按下」所有按鈕時,系統將如何回應。

幸運的是,現代微控制器有多種工具幫助開發人員理解嵌入式系統的時序和響應。舉例來說,ARM微控制器有追蹤功能,使開發人員可以定期採樣PC計數器,並重構系統時序和執行路徑。利用這些工具,開發人員能看到反映系統內部工作的實際資料,而不再只是默默祈禱系統依自己想要的方式執行程式碼。

特徵2——執行順序

對開發人員來說,瞭解指令執行順序與瞭解系統時序一樣重要。知道系統在何處分支或跳轉、各個函數或何時中斷,並以何種順序執行非常重要。如今的系統變得非常複雜,雖然我們自認為明白正在發生什麼,但仍然需要提取追蹤資料,清楚看到程式碼的執行。

筆者強烈推薦開發人員研究並熟悉這些微控制器追蹤工具。這些現代工具可以提供幾年前完全無法想像的直觀洞察圖。我曾經用這些工具提供的洞察功能找出了許多設計缺陷,因此在編寫程式碼之前設置好了追蹤與缺陷捕獲工具。

特徵3——程式碼大小

人們理所當然地認為每個開發人員都會監視程式碼大小,但我認為實際上他們沒有這樣做。若是問一個GPIO或SPI驅動程式在他們的系統中占多少空間,大多數開發人員甚至都不知道去哪兒找答案!他們唯一知道的是自己編寫的應用程式有GPIO和SPI,最終的應用程式使用了(比如)約47kB的快閃記憶體空間。

現今在我們的保護系統中,程式碼大小會根據所用的編譯器甚至優化等級和標誌而有很大的變化。另外,多數情況下,監視程式碼大小已經變得不那麼重要了,這是因為快閃記憶體相當便宜,供應商已經能夠做到根據程式碼大小便利地在同一微控制器系列的不同元件之間切換。但為了便於未來的專案規劃和元件選擇,追蹤驅動程式等專案的細節仍然特別有用。

特徵4——RAM的使用

與程式碼記憶體不同,RAM正成為嵌入式軟體發展的關鍵因素。提供超過100kB的快閃記憶體空間同時卻只提供16kB的RAM,對於微控制器已經很常見。這意味著RAM空間仍然非常珍貴。如果再考慮即時作業系統(RTOS),情況會變得更糟。在基於RTOS的系統中,開發人員通常將大量的RAM分配給執行緒堆疊空間,由於很難準確估計合適的大小,因此開發人員在編寫並實現他們的軟體時,需要監控RAM空間都作了何用。

特徵5——功耗

對於電池供電的設備,功耗無疑是系統設計的一個關鍵要求。而對於接入電網的系統,因為功耗不是關鍵要求,因此常被忽略。鑒於能量成本不斷上升、自然資源逐漸減少,開發人員仍應繼續監控設計的功耗需求,以便瞭解它們的功耗情況並最大程度地降低功耗。借助這種監視,由電池供電的設備顯然會透過替換電池或給電池充電而獲得更長的工作時間,那些直接連接到電網的設備也能節省電力成本而使消費者和最終用戶受益。的確,每一台單獨設備所節約的能源可能微乎其微,但如果數百萬台設備合在一起,就能知道有多少能量不會被浪費了。

總結

本文討論了嵌入式軟體發展人員在創建他們的系統時需要監控的五個重要特徵。現代系統擁有豐富的資源,監控這些特徵有時看似價值不高或沒有必要,但目前為止我在現場遇到的最大問題總是與這五個關鍵特徵密切相關。