嵌入式系統開發1 - 資源限制

閱讀時間約 4 分鐘
Making Embedded Systems

Making Embedded Systems

資源限制

嵌入式系統的設計是為了完成特定任務,因此會刪減不必要的資源來達成目標。這些資源包含以下幾項:

  • 記憶體(RAM)
  • 程式碼空間(ROM 或 Flash)
  • 處理器週期或速度
  • 電力消耗(也就是電池壽命)
  • 處理器周邊設備


這些資源在某種程度上可以互換。舉例來說,你可以以佔用更多程式碼空間為代價來提升執行效率,讓程式運行得更快。或者,你也可以降低處理器速度來節省電力。如果系統缺乏某些硬體介面,也可能透過 I/O 線路和處理器週期以軟體模擬方式來實現。然而,即便可以進行這些取捨,這些資源仍然非常有限,如何在有限的資源下達成目標是嵌入式系統面臨的重要挑戰之一。


硬體挑戰

除了資源限制,嵌入式系統開發還面臨來自硬體的挑戰。例如,交叉除錯(cross-debugging)可能讓人感到挫折,尤其在硬體剛啟動的階段,系統問題的來源可能難以判斷,因為問題可能出現在硬體也可能出現在軟體。與一般的電腦不同,你所撰寫的軟體甚至有可能對硬體造成實質損壞。此外,必須具備對硬體的深刻了解,知道硬體能做到什麼。但這些知識可能在下一個專案中無法完全沿用,因此你需要快速學習新的硬體技術。


以下是幾個具體的嵌入式系統開發案例,說明與硬體挑戰相關的問題:

案例 1:無線感應裝置的硬體啟動問題

在一個無線感應裝置的開發過程中,工程師遇到系統無法正確啟動的問題。剛開始時,他們認為是軟體初始化的問題,但實際上是硬體晶片中的電源管理電路存在缺陷,導致系統在上電後電壓不穩定。由於嵌入式系統軟硬體緊密結合,初期調試花費大量時間來排查硬體與軟體之間的交互問題,這就是交叉除錯過程中的典型挫折。

案例 2:醫療設備中的韌體升級錯誤

在一個醫療設備的開發中,韌體升級後設備無法正常工作。原因是軟體錯誤導致設備內部的處理器以不適當的方式控制電流,最終燒毀了一些硬體元件。這個案例說明,嵌入式系統中的軟體錯誤可能對硬體造成實質性的損壞,並強調開發過程中進行周全測試和軟硬體協作的重要性。

案例 3:智慧家居設備的I/O 模擬

在開發智慧家居控制器時,因為成本限制,選用的處理器缺少某些硬體介面(如專用I²C接口)。工程師不得不在有限的處理器資源下,利用軟體方式模擬I²C協定來與周邊感測器進行通信。這雖然成功達成目標,但也增加了開發和除錯的難度,尤其是在模擬的通信速率不穩定時,需要深入了解硬體時序,並進行細緻的調校。

案例 4:消費性電子產品的硬體升級困難

在消費性電子產品的開發中,工程師在現有系統中遇到硬體升級的瓶頸。原有的處理器已經運行接近其資源極限,當增加新功能時,發現處理器無法負荷新需求。在嘗試對軟體進行優化後,最終還是不得不更換處理器。但由於對新硬體的了解有限,整個開發團隊不得不重新學習新的硬體架構,這拖延了整個專案進度。


這些案例展示了嵌入式系統開發中,軟硬體之間複雜的互動,以及快速適應新硬體技術的重要性。


製造階段與量產

當開發與測試完成後,系統將進入量產階段。這是純軟體工程師通常不會涉及的領域。然而,嵌入式軟硬體工程師需要確保系統可以以合理的成本進行製造。支持量產是一個嵌入式工程師的任務,確保製造出的系統能夠忠實再現所設計的功能。


使用階段與產品生命週期

產品製造完成後將進入實際使用階段。對於消費性產品,這意味著它們將進入數百萬個家庭,任何的程式錯誤將被大眾體驗。對於醫療、航空或其他關鍵產品,程式錯誤可能是災難性的(這也是為什麼這些領域有大量文件工作)。對於科學或監測設備,系統可能部署於無法回收或難以回收的環境中(如火山口中的設備),因此它必須非常可靠。這些設備在離開開發者之後的生命週期,是設計軟體時必須考量的重點。


變化與預測未來

即便你已經解決了所有這些問題,仍然存在一個共通的最大挑戰,那就是變化。不僅產品目標會變化,專案的需求也會隨著時間推移而改變。在專案初期,你可能只想隨便拼湊一些功能來進行試驗,但隨著專案的深入,對產品目標和硬體的理解逐漸加深,你將開始構建更多基礎設施,使軟體更具除錯性、穩定性和靈活性。然而,在資源受限的環境下,你必須判斷究竟能投入多少基礎設施開發時間、記憶體、程式碼空間和處理器週期。最終開發出來的系統往往與最初的設計大相徑庭,而開發工作也幾乎永無止境。


嵌入式系統為特定應用量身定做,這有一個不幸的副作用,就是當應用需求變化時,系統可能無法跟隨變化。因此,嵌入式系統工程不僅是應對嚴格的限制與系統的生命週期,更重要的是預測未來的變化,並設計出能夠適應這些變化的軟體。你需要試著預測專案的未來發展方向,並設計出足夠靈活的軟體來應對這些變化。這無疑是一個極具挑戰性的工作。

5會員
240內容數
歡迎來到「Will 進步本」!我們將探索計算機科學、商用英文和生成式AI。從基礎到前沿,共同學習和交流,拓展知識視野,啟發創新思維
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
對於程式卡頓的問題,如何分析程式碼占用多少記憶體,如何釋放或改寫,可以先用python內建的tracemalloc模組來追蹤 Python 分配的記憶體區塊。 本文將介紹最簡單的用法,來分析一段程式碼占用了多少記憶體。 結果呈現 印出當前使用的記憶體,與峰值記憶體使用量。 程式範例 i
此篇文章連結 RAM 與 C語言陣列的關係並提供陣列與for-loop 使用的相關教學 前半段為基本電腦觀念、後半段為實作能力的教學
“所有人寫的程式會變成指令 每一道指令是由CPU執行 而CPU所能理解的指令類型有限”
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
電腦有很多零件,有CPU、主機板(MB)、記憶體(Memory)... 今天我想分享,我這次組電腦的過程,還有一些好用的技巧,希望能幫助到大家,組出心中的完美電腦!
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
對於程式卡頓的問題,如何分析程式碼占用多少記憶體,如何釋放或改寫,可以先用python內建的tracemalloc模組來追蹤 Python 分配的記憶體區塊。 本文將介紹最簡單的用法,來分析一段程式碼占用了多少記憶體。 結果呈現 印出當前使用的記憶體,與峰值記憶體使用量。 程式範例 i
此篇文章連結 RAM 與 C語言陣列的關係並提供陣列與for-loop 使用的相關教學 前半段為基本電腦觀念、後半段為實作能力的教學
“所有人寫的程式會變成指令 每一道指令是由CPU執行 而CPU所能理解的指令類型有限”
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
電腦有很多零件,有CPU、主機板(MB)、記憶體(Memory)... 今天我想分享,我這次組電腦的過程,還有一些好用的技巧,希望能幫助到大家,組出心中的完美電腦!
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val