嵌入式系統開發 3 - 如何設計更靈活的嵌入式系統架構

更新於 發佈於 閱讀時間約 3 分鐘

系統設計的挑戰

嵌入式系統的設計猶如解開一個拼圖,即使是小型的系統也充滿了細節,讓人眼花繚亂。作為開發者,你需要具備全局視野,才能辨識哪些部分的問題能夠用簡單的方法解決,哪些部分則潛藏著複雜的相依性。這時,設計的關鍵在於:不要追求一開始就完美,而是從一個「還可以」的設計開始,然後逐步改進。

為此,系統架構圖就是一個不可或缺的工具,它能幫助你視覺化整個系統並為軟體設計鋪路,或者至少能幫助你理解手上的那堆代碼。

產品定義的迭代過程

在項目啟動初期,產品的定義通常是不穩定的。你可能會經歷多次的反覆討論,反覆修正需求和設計。

在這個階段,你會將功能草圖畫在白板上,這樣可以更好地進行軟體架構設計。與此同時,硬體工程師們也在進行類似的工作,儘管他們的焦點可能有所不同,但理想狀況下他們會和你密切合作。在經過一段時間的迭代後,你會手握一個初步的軟體架構以及硬體草圖。尤其是在你經驗尚淺的時候,很多設計項目都可能是基於現有的平台,只做少量的修改。

這樣的迭代是開發過程中不可避免的一部分,尤其是在嵌入式系統中,軟體和硬體的互動密切,任何一方的改動都可能帶來連鎖反應。因此,及早確定雙方的需求和功能,才能讓產品順利進行。

從系統視角設計更好的嵌入式軟體

設計嵌入式系統的其中一個目標是:透過不同的視角來更好地理解整個系統,進而設計出更靈活的軟體。此時,繪製一些系統圖表會大有幫助,這些圖表能讓你具象化系統的模樣,並幫助你識別軟體的架構需求。無論是封裝、資訊隱藏,還是模組之間的良好介面,這些都是在面對變更需求和硬體限制時,設計良好系統的關鍵。

硬體穩定性的關鍵性

嵌入式系統強烈依賴硬體。如果硬體不穩定,那麼軟體的表現也會像是充滿錯誤且不可靠。因此,最早的設計工作應該集中在確保硬體的穩定性。這不僅有助於提高系統的可靠性,還能幫助你分離硬體變更和軟體錯誤,確保系統能夠更好地應對未來的挑戰。

許多開發者傾向於從系統功能出發,確定支持這些功能所需的硬體規格。這種方法當然沒有錯,甚至在某些情況下是更好的選擇。不過,我這裡更傾向於從低階硬體開始設計,這樣可以加強你對於硬體穩定性的重要認識。

抽象硬體設計的必要性

當你選擇由下而上的設計方法時,需記住你所設計的硬體只是一種代表性的設計。儘管最終你需要深入了解硬體的具體細節,但在設計初期,你可以先假定總有某個硬體符合你的需求(比如,有某個處理器能夠完成所有任務)。這種抽象設計能讓你快速確立系統、軟體和硬體的架構,然後再深入探討細節。

針對嵌入式系統架構的硬體抽象設計,有以下一些常見的設計原則:

  1. 模組化設計
    • 硬體抽象應該以模組化方式設計,讓每個模組負責特定的硬體功能,如 I/O、計時器、通訊等。這樣可以讓系統在修改或更新硬體時只需要改動具體的模組,而不影響整體架構。
  2. 抽象硬體接口(Hardware Abstraction Layer, HAL)
    • HAL 提供與硬體無關的接口,屏蔽底層硬體的細節,使軟體層與硬體層解耦。這能促進代碼的可重用性與可維護性,並且方便不同硬體平台的切換。
  3. 平台獨立性
    • 抽象應該考慮平台的獨立性。當設計嵌入式系統時,不應過早依賴某一特定硬體。這意味著代碼可以運行在不同硬體平台上,這增加了系統的可移植性。
  4. 分層設計
    • 系統應分層設計,其中底層處理硬體細節,中層處理具體功能,上層負責應用邏輯。這使得硬體變更或升級時,只需修改低層而不影響應用層。
  5. 事件驅動設計
    • 使用事件驅動模型可以將硬體操作轉化為抽象事件。這樣可以在不同硬體上進行事件觸發和響應,而不需要考慮具體硬體操作。
  6. 可配置性
    • 設計時應考慮硬體抽象的可配置性,使系統能根據不同的硬體選項或外圍設備進行調整而無需修改主要邏輯。
  7. 一致的錯誤處理機制
    • 不同硬體的錯誤可能千變萬化,抽象層應提供一致的錯誤處理機制,讓上層系統能夠以相同方式處理錯誤。

抽象設計的優點在於,它能讓你專注於整體架構,而不會過早陷入細枝末節。這種方法的靈活性也能幫助你在日後的開發過程中更加游刃有餘,能應對硬體或需求的變更。

總結

嵌入式系統的設計是一個充滿挑戰的過程,它不僅需要你具備對整個系統的深刻理解,還要求你具備靈活應對變化的能力。透過系統視角的圖表,你能更好地組織設計想法,並識別潛在的問題區域。記住,設計從來不是一蹴而就的,而是逐步迭代的過程。在這個過程中,抽象硬體設計、專注硬體穩定性,以及靈活應對變化,都是設計嵌入式系統的關鍵。

Making Embedded Systems

Making Embedded Systems



留言
avatar-img
留言分享你的想法!
avatar-img
Will 進步本
6會員
250內容數
歡迎來到「Will 進步本」!我們將探索計算機科學、商用英文和生成式AI。從基礎到前沿,共同學習和交流,拓展知識視野,啟發創新思維
Will 進步本的其他內容
2024/08/28
評估元件時使用數據表的步驟 評估元件是一項進階技能,通常是你在實現系統的驅動程序之後才會培養的能力。
2024/08/28
評估元件時使用數據表的步驟 評估元件是一項進階技能,通常是你在實現系統的驅動程序之後才會培養的能力。
2024/08/26
閱讀數據表(Datasheet) 在產品開發的過程中,面對發佈壓力,往往會讓我們無法慢下來仔細閱讀元件的數據表、手冊以及應用說明。更糟糕的是,儘管我們可能已經翻遍了這些文件,卻發現什麼也沒記住,因為這些文件中的專業術語對我們來說就像外語一樣陌生。
2024/08/26
閱讀數據表(Datasheet) 在產品開發的過程中,面對發佈壓力,往往會讓我們無法慢下來仔細閱讀元件的數據表、手冊以及應用說明。更糟糕的是,儘管我們可能已經翻遍了這些文件,卻發現什麼也沒記住,因為這些文件中的專業術語對我們來說就像外語一樣陌生。
2024/08/26
電壓與電流 我們測量電量時使用電壓和電流,但這兩者都源於更基本的物理原理。
Thumbnail
2024/08/26
電壓與電流 我們測量電量時使用電壓和電流,但這兩者都源於更基本的物理原理。
Thumbnail
看更多
你可能也想看
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
資料的統合 在程式設計中,其他人通常關心是否注意到執行的細節。作為程式設計師,主要應該關心的是程式的表現,但往往忽略了很多細節,這些細節可以決定程式的好壞。程式的好壞很大程度上取決於資料的統合,也就是資料是否被正規化。 不同類型的資料在系統中呈現一致 正規化可能對一些人來說聽起來很抽象,有些人
Thumbnail
資料的統合 在程式設計中,其他人通常關心是否注意到執行的細節。作為程式設計師,主要應該關心的是程式的表現,但往往忽略了很多細節,這些細節可以決定程式的好壞。程式的好壞很大程度上取決於資料的統合,也就是資料是否被正規化。 不同類型的資料在系統中呈現一致 正規化可能對一些人來說聽起來很抽象,有些人
Thumbnail
系統的分析與規劃 在談到程式設計時,首要的是進行系統的分析與規劃。程式設計的起點通常是系統分析與規劃,這涉及到如何分析和設計系統的大原則和方向。為了達到預期效果,重要的是擁有對產業的清晰邏輯認識和深入了解。 進行深入了解 若要進行系統分析,必須對企業的設計和程式設計的對象進行深入了解,以充分理
Thumbnail
系統的分析與規劃 在談到程式設計時,首要的是進行系統的分析與規劃。程式設計的起點通常是系統分析與規劃,這涉及到如何分析和設計系統的大原則和方向。為了達到預期效果,重要的是擁有對產業的清晰邏輯認識和深入了解。 進行深入了解 若要進行系統分析,必須對企業的設計和程式設計的對象進行深入了解,以充分理
Thumbnail
在軟體開發領域,乾淨程式碼是一個極為重要的概念。乾淨程式碼不僅僅是讓代碼運作正確,更是確保代碼易於閱讀、理解和維護的關鍵。本文將深入探討如何撰寫乾淨程式碼,並介紹一些提升代碼可讀性與維護性的最佳實踐方法。
Thumbnail
在軟體開發領域,乾淨程式碼是一個極為重要的概念。乾淨程式碼不僅僅是讓代碼運作正確,更是確保代碼易於閱讀、理解和維護的關鍵。本文將深入探討如何撰寫乾淨程式碼,並介紹一些提升代碼可讀性與維護性的最佳實踐方法。
Thumbnail
在軟體開發領域中,良好的架構設計是實現可維護性、擴展性和重用性的關鍵。其中,"三層式架構"是一種常見且易於理解的架構模式。本文將介紹三層式架構的概念、優勢以及如何在你的軟體項目中應用它。
Thumbnail
在軟體開發領域中,良好的架構設計是實現可維護性、擴展性和重用性的關鍵。其中,"三層式架構"是一種常見且易於理解的架構模式。本文將介紹三層式架構的概念、優勢以及如何在你的軟體項目中應用它。
Thumbnail
養成 1px 都不差的切版練習,紀錄我的訓練過程。
Thumbnail
養成 1px 都不差的切版練習,紀錄我的訓練過程。
Thumbnail
知識圖解是一個非常實用的技能,但不是很好掌握。這篇文章分享由軟體架構師 Simon Brown 提出的 C4 模型,可以很好地讓圖解變的「見樹又見林」,最後我還會分享在軟體業之外的應用。如果你是需要在工作場合中思考與溝通複雜事物的人,就一起來看看這篇文章吧!
Thumbnail
知識圖解是一個非常實用的技能,但不是很好掌握。這篇文章分享由軟體架構師 Simon Brown 提出的 C4 模型,可以很好地讓圖解變的「見樹又見林」,最後我還會分享在軟體業之外的應用。如果你是需要在工作場合中思考與溝通複雜事物的人,就一起來看看這篇文章吧!
Thumbnail
UX文案是設計師們操作情境很好的工具,可以減少用戶認知負擔,讓介面簡單易懂。但我看過許多後台介面的Placeholder文案似乎是亂寫的? 為什麼想寫這個題目? 比起光鮮亮麗的前台介面流程,一般營運管理介面(俗稱後台)經常淪為配角,常被認為是「有空再來談怎麼優化」,而所謂的後台優化常常意味著追加功能
Thumbnail
UX文案是設計師們操作情境很好的工具,可以減少用戶認知負擔,讓介面簡單易懂。但我看過許多後台介面的Placeholder文案似乎是亂寫的? 為什麼想寫這個題目? 比起光鮮亮麗的前台介面流程,一般營運管理介面(俗稱後台)經常淪為配角,常被認為是「有空再來談怎麼優化」,而所謂的後台優化常常意味著追加功能
Thumbnail
問了問身邊的同事:「把你的Java Code改成用C的源碼風格呈現的話,你會因此就難以理解同一份程式嗎?」,或是反過來:「若同事的源碼和你的Domain完全不同,但和你的源碼風格一致,你會因此覺得這份源碼比較容易理解嗎?」 我真的都得到肯定的答案,雖然有點難以理解…
Thumbnail
問了問身邊的同事:「把你的Java Code改成用C的源碼風格呈現的話,你會因此就難以理解同一份程式嗎?」,或是反過來:「若同事的源碼和你的Domain完全不同,但和你的源碼風格一致,你會因此覺得這份源碼比較容易理解嗎?」 我真的都得到肯定的答案,雖然有點難以理解…
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News