嵌入式系統開發2 - 靈活應對變化

閱讀時間約 5 分鐘

面對嵌入式系統挑戰的原則

嵌入式系統開發過程常被比喻為拼圖,一個個相互契合的組件形成完整系統。有時,你可能會強行將不匹配的組件拼在一起,但結果卻與預期的圖像不符。我們應該拋棄將開發最終結果視為單一版本程式碼的想法,嵌入式系統的開發更像是隨著時間變化的拼圖,涵蓋了概念、原型設計、硬體啟動、除錯、測試、發佈、維護等階段,並且會不斷重複這些過程。

彈性設計與系統模組化

在嵌入式系統中,彈性設計不僅是讓程式碼能夠解決當下的問題,更重要的是確保系統在整個生命週期中能夠靈活應對變化。我們的目標是保持足夠的彈性,在有限的資源下滿足產品需求,並應對嵌入式系統中固有的其他問題。

為了提升系統的靈活性,我們可以從軟體設計中借鑒一些優秀的設計原則。

  • 模組化設計是將功能拆分成子系統,各子系統的資料彼此隱藏起來。
  • 透過封裝,我們建立子系統之間的接口,使得各子系統對彼此的了解降到最低。
  • 當我們的子系統之間是鬆耦合的時候,我們就可以在修改某一部分程式碼時,確保不會影響其他部分,這樣當需要時,我們可以重新組裝系統。

如何進行系統拆分

系統拆分需要經驗,但有一個簡單的準則:考慮哪些部分可以獨立變動

在嵌入式系統中,這往往可以通過物理硬體來幫助識別。舉例來說,如果一個感測器 X 透過通訊通道 Y 進行數據傳輸,那麼感測器和通道可以視為兩個獨立的子系統,也是程式碼模組化的良好候選對象。

測試與品質控制

一旦我們將系統拆解成獨立的物件或模組,就可以針對每個模組進行測試。越早發現並修正錯誤,成本越低,對所有人都有利。因此,不要等待別人為你發現問題,測試和品質控制應該是你開發過程中的一部分

寫程式時,應考慮如何測試它。為系統編寫測試程式不僅能提高程式品質,還可以作為文件,讓其他人更容易理解你的程式。此外,這會讓人覺得你是一個高水準的開發者。

文件與程式碼注解

另一個減少錯誤的方式是對程式碼進行適當的註解(comment)。然而,記錄程式碼時,要掌握適當的細節層次。例如:

i++; // 增加索引值

這類註解毫無意義,因為它無法提供額外的資訊。

註解的目標是為未來的自己或其他開發者提供清晰的上下文。假設你在一年後再次看到這段程式碼,已經忘記了當時的解決方案,註解應該幫助你重新理解這段程式碼的用意。註解應該描述程式碼的意圖(intent),而非操作過程。

延後最佳化

在資源受限的系統中,提早最佳化的誘惑是很大的。然而,你應該抵制這種衝動。首先實作出功能,確保其正常運行並經過測試,然後再針對需要的部分進行優化。

時間和資源有限,因此應優先關注主要的資源消耗者。優化一個很少執行的函數並無多大價值,如果另一個常執行的函數占用了大量處理時間,那麼這才應該是優化的重點。儘管在嵌入式系統中,某些程度的最佳化是不可避免的,但必須在了解資源使用狀況後再進行調整。

避免過早最佳化


如著名的電腦科學家 Donald Knuth 所言:「過早最佳化是萬惡之源。」大多數情況下,我們應該專注於解決大部分問題,而非沉迷於微小的效率提升,這樣可以避免將精力浪費在不必要的細節上。

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. —Donald Knuth

仔細理解這句話時,可以從以下幾個角度進行分析:

1. 避免優化錯誤的地方

在開發初期,你可能並不完全了解系統的性能瓶頸在哪裡。如果在這時過早對某些部分進行優化,很可能會浪費大量時間,最終發現優化的地方其實對整體性能影響不大。而這樣的優化可能會讓程式碼變得更複雜、難以理解,甚至引入新的錯誤。

2. 專注於正確的功能

Knuth的建議是先讓系統運行起來,專注於實現功能並確保其正確性。當系統的主要功能完成後,再回頭優化那些真正需要優化的部分。這樣可以避免因過度關注效能導致的資源浪費,並確保系統具備穩定性和可維護性。

3. 合理分配時間與資源

Knuth強調不要在小的效能優化上浪費太多時間,應該將精力集中在那些真正需要解決的問題上。在資源有限的情況下,開發者應該優先完成能夠產生最大效益的工作,而非陷入微小的效能改進中。

4. 最佳化是針對瓶頸的

優化應該基於分析和數據支撐,專注於系統的真正瓶頸部分。例如,先完成所有功能,進行性能測試,然後根據結果來決定哪部分需要優化。這種方法可以有效避免無謂的「小優化」而導致系統混亂和不可預測的行為。

實例:嵌入式系統開發中的模組化應用

在開發一個智慧農業系統時,團隊將土壤濕度感測器、溫度感測器和無線通訊模組拆分成獨立的模組。這些模組之間通過定義良好的接口進行通信。當需要升級無線通訊模組時,其他感測器模組並未受到影響,團隊僅需專注於通訊模組的調整,節省了大量開發和測試時間。

另一個例子是在汽車電子系統中,團隊將引擎控制、溫度監控和安全系統分別作為獨立的模組進行開發。這使得當引擎控制系統需要調整時,安全系統和溫度監控系統仍然能保持穩定運行,降低了系統崩潰的風險。

這些原則和實例展示了嵌入式系統開發的挑戰和應對策略,有效應用這些設計原則能夠大幅提升系統的靈活性和可靠性。

4會員
191內容數
歡迎來到「Will 進步本」!我們將探索計算機科學、商用英文和生成式AI。從基礎到前沿,共同學習和交流,拓展知識視野,啟發創新思維
留言0
查看全部
發表第一個留言支持創作者!
Will 進步本 的其他內容
資源限制 嵌入式系統的設計是為了完成特定任務,因此會刪減不必要的資源來達成目標。
資源限制 嵌入式系統的設計是為了完成特定任務,因此會刪減不必要的資源來達成目標。
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
在這篇文章中,我們將探討雷·達利歐(Ray Dalio)的著作《原則:生活與工作》中的五個重要觀點。雷·達利歐是一位知名的瑞典投資者。他強調創立原則以指導決策並實現成功的重要性。 觀點一:系統化你的決策─建立原則 原則是基本真理,為成功行為奠定基礎。透過在相似情境中反覆應用原則,你能夠實現目標。
Thumbnail
嵌入式金融是一種引人矚目的趨勢,正在以不可阻擋的勢頭迅速改變商業格局。曾經,每家公司都力爭成為一家軟件公司,如今,我們正迅速進入一個全新的時代,每家公司都將成為金融科技公司。將金融服務無縫地融入到生活中。電商、社交媒體都成為金融服務的入口。消費者無需離開自己常用的應用程序,即可享受到全方位的金融功能
Thumbnail
很多關於自我成長類型的書,都可能提到原則這個詞。可能每個人或多或少都聽說過原則是什麼,也可能已經知道它的重要性是什麼。但其實原則在我們生活中起到的作用是什麼呢?這編先帶大家了解一下。
Thumbnail
保險科技是近期各大新創公司及風險投資家關注的一塊大餅,透過科技的輔助替保險業添上不少好處,不過也帶來許多隱憂及挑戰。其中「嵌入式保險」更是近期保險科技中最熱門的話題之一,同時也是新創公司力推的服務項目。在快速變化的現代社會中,保險科技除了「嵌入式保險」之外還有哪些服務項目是指日可待的呢?
我是個樂於給予的人 卻也明白自我的價值所在 如果你給不了全心投入 我寧可分毫不取
Thumbnail
如何在双链笔记软件中建立仪表盘?以嵌入式小组件库 NotionPet 为例,辅助用户建立强大的知识库。 双链笔记软件的兴起与评测 Roam Research 综合评测、学习资源、使用教程分享 Logseq 双向链接笔记评测:优点、缺点、评价、学习资源/教程 使用小组件库强化双链笔记软件 介绍
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
在這篇文章中,我們將探討雷·達利歐(Ray Dalio)的著作《原則:生活與工作》中的五個重要觀點。雷·達利歐是一位知名的瑞典投資者。他強調創立原則以指導決策並實現成功的重要性。 觀點一:系統化你的決策─建立原則 原則是基本真理,為成功行為奠定基礎。透過在相似情境中反覆應用原則,你能夠實現目標。
Thumbnail
嵌入式金融是一種引人矚目的趨勢,正在以不可阻擋的勢頭迅速改變商業格局。曾經,每家公司都力爭成為一家軟件公司,如今,我們正迅速進入一個全新的時代,每家公司都將成為金融科技公司。將金融服務無縫地融入到生活中。電商、社交媒體都成為金融服務的入口。消費者無需離開自己常用的應用程序,即可享受到全方位的金融功能
Thumbnail
很多關於自我成長類型的書,都可能提到原則這個詞。可能每個人或多或少都聽說過原則是什麼,也可能已經知道它的重要性是什麼。但其實原則在我們生活中起到的作用是什麼呢?這編先帶大家了解一下。
Thumbnail
保險科技是近期各大新創公司及風險投資家關注的一塊大餅,透過科技的輔助替保險業添上不少好處,不過也帶來許多隱憂及挑戰。其中「嵌入式保險」更是近期保險科技中最熱門的話題之一,同時也是新創公司力推的服務項目。在快速變化的現代社會中,保險科技除了「嵌入式保險」之外還有哪些服務項目是指日可待的呢?
我是個樂於給予的人 卻也明白自我的價值所在 如果你給不了全心投入 我寧可分毫不取
Thumbnail
如何在双链笔记软件中建立仪表盘?以嵌入式小组件库 NotionPet 为例,辅助用户建立强大的知识库。 双链笔记软件的兴起与评测 Roam Research 综合评测、学习资源、使用教程分享 Logseq 双向链接笔记评测:优点、缺点、评价、学习资源/教程 使用小组件库强化双链笔记软件 介绍