跳轉至內容

嵌入式系統/嵌入式系統基礎

來自華夏公益教科書,一個開放的世界中的開放書籍

嵌入式系統程式設計不同於普通的PC程式設計。在許多方面,嵌入式系統的程式設計就像25年前的PC程式設計。系統的硬體通常選擇最便宜的,以儘可能降低裝置成本。為了使程式設計更容易,每個單元多花一美元,可能會導致數百萬美元的損失。相比之下,僱傭一名程式設計師額外工作一個月很便宜。這意味著程式設計師必須使用速度慢的處理器和低記憶體,同時還要應對大多數PC應用程式中不存在的效率需求。以下是嵌入式領域特有的問題列表。

嵌入式開發只佔總程式設計的一小部分。與PC世界不同,嵌入式架構數量眾多,PC世界只有1個指令集,而Unix世界只有3或4個主要指令集。這意味著工具更昂貴。這也意味著它們的功能更少,開發程度更低。在一個大型的嵌入式專案中,你幾乎總能在某個地方找到某種編譯器錯誤。

除錯工具是另一個問題。由於你不能總是在嵌入式處理器上執行通用程式,因此你也不能總是在它上面執行偵錯程式。這使得修復程式變得困難。JTAG埠等特殊硬體可以部分解決這個問題。但是,如果你在系統控制真實世界硬體(如電機)時停止在斷點處,則可能導致裝置永久損壞。因此,從事嵌入式程式設計的人員很快就會成為使用序列IO通道和錯誤訊息樣式除錯的大師。

為了節省成本,嵌入式系統經常使用最便宜的處理器來完成任務。這意味著你的程式需要儘可能高效地編寫。在處理大型資料集時,記憶體快取未命中等在PC程式設計中無關緊要的問題可能會對你造成傷害。幸運的是,這種情況不會經常發生 - 使用合理高效的演算法來開始,只有在必要時才進行最佳化。當然,由於與偵錯程式無法正常工作的原因相同,普通的分析器也不能很好地工作。因此,需要更多的直覺和對軟體和硬體架構的理解才能有效地最佳化。

記憶體也是一個問題。出於相同的成本節約原因,嵌入式系統通常使用它們能使用的最小記憶體。這意味著它們的演算法必須對記憶體效率(與PC程式不同,你會經常為了記憶體而犧牲處理時間,而不是相反)。這也意味著你不能承受記憶體洩漏。嵌入式應用程式通常使用確定性記憶體技術,並避免預設的 "new" 和 "malloc" 函式,以便更容易地查詢和消除洩漏。

程式設計師期望的其他資源可能根本不存在。例如,大多數嵌入式處理器沒有硬體FPU(浮點運算單元)。這些資源要麼需要在軟體中模擬,要麼完全避免。

即時問題

[編輯 | 編輯原始碼]

嵌入式系統經常控制硬體,必須能夠即時響應它們。無法做到這一點可能會導致測量誤差,甚至損壞硬體(如電機)。資源的缺乏使得這個問題更加困難。幾乎所有的嵌入式系統都需要能夠優先處理某些任務,並且能夠為了高優先順序任務(如硬體控制)而推遲/跳過低優先順序任務(如使用者介面)。

定點算術

[編輯 | 編輯原始碼]

許多嵌入式專案在其程式設計師中強制執行禁止使用浮點的規則。

定點算術和其他替代方法通常比浮點算術更好。

我們將討論這些優勢,並在後面的章節中詳細介紹定點和浮點數。

進一步閱讀

[編輯 | 編輯原始碼]
華夏公益教科書