嵌入式系統開發5: 設計變更(Design Change)的應對策略

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

設計變更的應對策略

當我們手中已有了不同的架構圖時,下一步該如何進行?也許你已經發現了一些你最初沒有考慮到的代碼模塊,也可能你已經更清楚地理解了模塊之間的交互方式。在深入探討這些交互(即介面)之前,有一件事情值得你花點時間來思考:什麼會改變?

在設計初期,一切都是實驗性的,因此可以預期系統中的任何部分都有可能發生變化。然而,我們的目標是使初步的架構和代碼對系統特性或硬體的變更更具抵抗力。例如,你可能知道產品的某些功能不太可能改變,但具體實現方式可能會有所變化。就像你的產品也許需要一個顯示屏,且傳輸位圖的最佳方式是通過閃存。雖然 SPI 介面的閃存晶片看起來是個不錯的選擇,但具體用哪一款閃存晶片、哪種 LCD、圖像數據或字型數據都可能變動。因此,圖中的每個模塊應該代表其理想的抽象概念,而不是具體的實現。

封裝模塊以應對變更

在設計圖表時,我們要尋找不依賴於具體模塊內容或行為的介面,這就是封裝(Encapsulation)。通過架構圖表,我們可以找出設計中適合這些介面的地方。每個模塊可能都有其自己的介面,有時這些介面可以合併成一個對象。但是是否應該立刻進行合併,還是等待以後再做?

有時提前合併是值得的。當你可以簡化圖表的複雜性,而不過度犧牲未來的靈活性時,就應該考慮這樣做。例如:

  • 組織圖(Organigram)中,看看是否有某些對象只被另一個對象使用。如果這些對象不太可能獨立變更,則可以考慮將它們合併。如果它們有可能單獨變更,那麼不應合併。
  • 分層圖(Layering Diagram)中,看看是否有一些對象總是一起使用。這些對象可以組合成一個更高層次的介面來管理,例如創建一個硬體抽象層(HAL)。
  • 哪些模塊有大量的相互依賴關係?這些依賴關係是否可以分離並簡化?或者這些依賴可以進行分組嗎?

舉例來說,如果一個 LCD 顯示模塊僅依賴於平行介面,並且沒有其他子系統需要訪問該介面,那麼這個介面就可以被封裝在 LCD 模塊內部。這樣,你可以隱藏不必要的實現細節,保持架構的簡潔性。

任務分配與模塊分離

這些圖表不僅幫助你理解系統架構,還能協助你分配工作給團隊成員。例如,哪些部分可以作為獨立的模塊由其他人來實現?而哪些部分應該由你自己負責?

過於傾向於將乏味的部分工作分給他人可能會降低產品質量。相反,你應該思考哪些整體模塊或子樹可以交給他人完成。在描述模塊間的相依關係時,你可能會發現這些依賴比你最初想像的更為複雜,或許一個簡單的旗標(如信號燈)就能幫助你解決誰擁有資源的問題。

通過清晰的介面(interface)來分離不同的代碼區塊,能夠使你的專案進展更加順利。當團隊成員各自負責自己代碼的開發和測試時,整個專案的效率會顯著提升。

驅動介面(Driver Interface)設計

在考慮模塊介面時,從底層開始也是一個有效的方法。底層模塊通常是與硬體打交道的驅動程序。在嵌入式系統中,許多驅動程序基於類 Unix 系統的 POSIX API,因為這種模型在很多情況下運作良好,並且可以避免每次需要訪問硬體時都重新設計驅動程序。

Unix 驅動程序的介面設計相對簡單:

  • open:打開驅動程式,類似於初始化。
  • close:關閉驅動程式並進行清理。
  • read:從設備讀取數據。
  • write:向設備發送數據。
  • ioctl:I/O 控制,用來處理上述操作未涵蓋的功能。這個介面雖然不太結構化,但仍然非常流行。

這些標準介面可以讓你的設計更具可維護性和可重用性。如果你的驅動可以遵循這些標準接口,那麼對其他開發者來說,看到這些功能時他們就能快速知道該期待什麼。

總之,設計一個靈活、可擴展的嵌入式系統架構,需要你考慮到系統可能的變更,並運用封裝來保護系統免受未來變更的影響。通過合理劃分工作、清晰劃定模塊介面,以及遵循通用的驅動接口設計原則,你可以構建出一個穩定且可維護的系統。



留言
avatar-img
留言分享你的想法!
avatar-img
Will 進步本
5會員
244內容數
歡迎來到「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
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
1.設計系統不用從頭開始 在設計產品時,有一個觀念可能會顛覆我們對於產品設計的傳統想法。這是初期在 AlleyPin 擔任一人設計師,負責各種產品或視覺設計工作時才逐漸領悟到的一點。 當時,我在購買UI Kits這件事情上猶豫不決,擔心使用現成的設計資源會使我的設計變得無聊或是缺乏創造。後來面臨
Thumbnail
1.設計系統不用從頭開始 在設計產品時,有一個觀念可能會顛覆我們對於產品設計的傳統想法。這是初期在 AlleyPin 擔任一人設計師,負責各種產品或視覺設計工作時才逐漸領悟到的一點。 當時,我在購買UI Kits這件事情上猶豫不決,擔心使用現成的設計資源會使我的設計變得無聊或是缺乏創造。後來面臨
Thumbnail
CSS 的繼承性是開發網頁樣式時的一個重要概念,它使得樣式設計更加靈活和高效,有助於提高程式碼的可讀性、一致性和可重用性,並加快開發速度,從而提供更好的開發體驗。
Thumbnail
CSS 的繼承性是開發網頁樣式時的一個重要概念,它使得樣式設計更加靈活和高效,有助於提高程式碼的可讀性、一致性和可重用性,並加快開發速度,從而提供更好的開發體驗。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的介面。這種設計允許使用者在系統運行時動態選擇和切換演算法,以達成相同的目的。
Thumbnail
策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的介面。這種設計允許使用者在系統運行時動態選擇和切換演算法,以達成相同的目的。
Thumbnail
Creative Coding 作品變化概念,有或沒有的差別,隨機性,色彩模式的調整...等
Thumbnail
Creative Coding 作品變化概念,有或沒有的差別,隨機性,色彩模式的調整...等
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
程式設計中不可或缺的一部分 介面是使用者與程式互動的媒介,因此介面的設計會影響使用者的體驗和感受。一個清晰明白、易懂的介面,可以讓使用者輕鬆地使用程式,並獲得良好的使用體驗。 需要與程式設計師密切溝通 設計師需要了解程式的功能和需求,並根據使用者的習慣和需求進行設計。設計師和程式設計師之間的溝
Thumbnail
程式設計中不可或缺的一部分 介面是使用者與程式互動的媒介,因此介面的設計會影響使用者的體驗和感受。一個清晰明白、易懂的介面,可以讓使用者輕鬆地使用程式,並獲得良好的使用體驗。 需要與程式設計師密切溝通 設計師需要了解程式的功能和需求,並根據使用者的習慣和需求進行設計。設計師和程式設計師之間的溝
Thumbnail
系統的分析與規劃 在談到程式設計時,首要的是進行系統的分析與規劃。程式設計的起點通常是系統分析與規劃,這涉及到如何分析和設計系統的大原則和方向。為了達到預期效果,重要的是擁有對產業的清晰邏輯認識和深入了解。 進行深入了解 若要進行系統分析,必須對企業的設計和程式設計的對象進行深入了解,以充分理
Thumbnail
系統的分析與規劃 在談到程式設計時,首要的是進行系統的分析與規劃。程式設計的起點通常是系統分析與規劃,這涉及到如何分析和設計系統的大原則和方向。為了達到預期效果,重要的是擁有對產業的清晰邏輯認識和深入了解。 進行深入了解 若要進行系統分析,必須對企業的設計和程式設計的對象進行深入了解,以充分理
Thumbnail
替產業做設計 有人要我談程式設計,那我就稍微談一下。我從事的大都是產業的工作,所以我們也從如何替產業做設計來談起。基本上,每個產業都會有自己的作業流程,大同小異。但是基礎來做都是一樣的,都會有客戶、物料、產品、供應商、員工等資料。不同的是,由於企業型態的不同,他們每個人有不同的作業流程。這個作業流
Thumbnail
替產業做設計 有人要我談程式設計,那我就稍微談一下。我從事的大都是產業的工作,所以我們也從如何替產業做設計來談起。基本上,每個產業都會有自己的作業流程,大同小異。但是基礎來做都是一樣的,都會有客戶、物料、產品、供應商、員工等資料。不同的是,由於企業型態的不同,他們每個人有不同的作業流程。這個作業流
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News