嵌入式系統開發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. 最佳化是針對瓶頸的

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

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

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

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

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

5會員
240內容數
歡迎來到「Will 進步本」!我們將探索計算機科學、商用英文和生成式AI。從基礎到前沿,共同學習和交流,拓展知識視野,啟發創新思維
留言0
查看全部
發表第一個留言支持創作者!
Will 進步本 的其他內容
資源限制 嵌入式系統的設計是為了完成特定任務,因此會刪減不必要的資源來達成目標。
資源限制 嵌入式系統的設計是為了完成特定任務,因此會刪減不必要的資源來達成目標。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
在這篇文章中,我們將探討雷·達利歐(Ray Dalio)的著作《原則:生活與工作》中的五個重要觀點。雷·達利歐是一位知名的瑞典投資者。他強調創立原則以指導決策並實現成功的重要性。 觀點一:系統化你的決策─建立原則 原則是基本真理,為成功行為奠定基礎。透過在相似情境中反覆應用原則,你能夠實現目標。
Thumbnail
嵌入式金融是一種引人矚目的趨勢,正在以不可阻擋的勢頭迅速改變商業格局。曾經,每家公司都力爭成為一家軟件公司,如今,我們正迅速進入一個全新的時代,每家公司都將成為金融科技公司。將金融服務無縫地融入到生活中。電商、社交媒體都成為金融服務的入口。消費者無需離開自己常用的應用程序,即可享受到全方位的金融功能
Thumbnail
很多關於自我成長類型的書,都可能提到原則這個詞。可能每個人或多或少都聽說過原則是什麼,也可能已經知道它的重要性是什麼。但其實原則在我們生活中起到的作用是什麼呢?這編先帶大家了解一下。
Thumbnail
保險科技是近期各大新創公司及風險投資家關注的一塊大餅,透過科技的輔助替保險業添上不少好處,不過也帶來許多隱憂及挑戰。其中「嵌入式保險」更是近期保險科技中最熱門的話題之一,同時也是新創公司力推的服務項目。在快速變化的現代社會中,保險科技除了「嵌入式保險」之外還有哪些服務項目是指日可待的呢?
我是個樂於給予的人 卻也明白自我的價值所在 如果你給不了全心投入 我寧可分毫不取
Thumbnail
如何在双链笔记软件中建立仪表盘?以嵌入式小组件库 NotionPet 为例,辅助用户建立强大的知识库。 双链笔记软件的兴起与评测 Roam Research 综合评测、学习资源、使用教程分享 Logseq 双向链接笔记评测:优点、缺点、评价、学习资源/教程 使用小组件库强化双链笔记软件 介绍
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
在這篇文章中,我們將探討雷·達利歐(Ray Dalio)的著作《原則:生活與工作》中的五個重要觀點。雷·達利歐是一位知名的瑞典投資者。他強調創立原則以指導決策並實現成功的重要性。 觀點一:系統化你的決策─建立原則 原則是基本真理,為成功行為奠定基礎。透過在相似情境中反覆應用原則,你能夠實現目標。
Thumbnail
嵌入式金融是一種引人矚目的趨勢,正在以不可阻擋的勢頭迅速改變商業格局。曾經,每家公司都力爭成為一家軟件公司,如今,我們正迅速進入一個全新的時代,每家公司都將成為金融科技公司。將金融服務無縫地融入到生活中。電商、社交媒體都成為金融服務的入口。消費者無需離開自己常用的應用程序,即可享受到全方位的金融功能
Thumbnail
很多關於自我成長類型的書,都可能提到原則這個詞。可能每個人或多或少都聽說過原則是什麼,也可能已經知道它的重要性是什麼。但其實原則在我們生活中起到的作用是什麼呢?這編先帶大家了解一下。
Thumbnail
保險科技是近期各大新創公司及風險投資家關注的一塊大餅,透過科技的輔助替保險業添上不少好處,不過也帶來許多隱憂及挑戰。其中「嵌入式保險」更是近期保險科技中最熱門的話題之一,同時也是新創公司力推的服務項目。在快速變化的現代社會中,保險科技除了「嵌入式保險」之外還有哪些服務項目是指日可待的呢?
我是個樂於給予的人 卻也明白自我的價值所在 如果你給不了全心投入 我寧可分毫不取
Thumbnail
如何在双链笔记软件中建立仪表盘?以嵌入式小组件库 NotionPet 为例,辅助用户建立强大的知识库。 双链笔记软件的兴起与评测 Roam Research 综合评测、学习资源、使用教程分享 Logseq 双向链接笔记评测:优点、缺点、评价、学习资源/教程 使用小组件库强化双链笔记软件 介绍