作為嵌入式開發人員,在網上搜索“嵌入式軟件定義”、“什麼是嵌入式軟件?”或者嵌入式軟件的定義,你會發現許多文章陳述瞭如下內容:
“嵌入式軟件是計算機軟件,用於控制通常不被認為是計算機的機器或設備,通常稱為嵌入式系統。它通常專用於運行它的特定硬件,並且有時間和內存限制。”
“嵌入式軟件是一種嵌入在硬件或非PC設備中的軟件。它是專門為運行它的特定硬件編寫的,由於設備的計算能力有限,通常會受到處理和內存的限制。”
這些定義模糊地抓住了嵌入式軟件的概念,但是它們沒有告訴我們它是什麼!
什麼是嵌入式軟件?
嵌入式軟件是設計和構建為運行在專門的、應用特定的硬件上的代碼,該硬件通過各種形式的輸入、處理、輸出和存儲來管理數據。嵌入式軟件通常是確定性的,有軟、硬實時調度期限。
對嵌入式開發人員來說,上述定義更接近嵌入式軟件和固件專家用來描述嵌入式軟件的定義。請注意,定義的第一部分類似於一般定義:
嵌入式軟件是設計和構建為在專門的、特定於應用的硬件上運行的代碼
然而,定義中的關鍵差異出現在這句話的第二部分:
"通過各種形式的輸入、處理、輸出和存儲來管理數據."
原則1——數據決定設計
第一個原則是“數據決定設計”。嵌入式軟件開發人員經常被硬件、事件、狀態和其他干擾所困擾。
每個嵌入式軟件設計的核心都是數據。數據才是嵌入式軟件真正的意義所在。甚至可以更進一步說,嵌入式系統就是關於數據的。每個系統都有輸入,這些輸入經過處理後產生期望的輸出。這些輸入和輸出通常以某種易失性或非易失性的方式存儲。如果嵌入式開發人員遵循這些數據,設計將會到位。
原則2——沒有硬件(只有數據)
直接源於我們嵌入式軟件定義的第二個原則是,沒有硬件,只有數據。現在可能會認為這是沒有意義的。然而,我們定義中的第一句話指出:
嵌入式軟件是設計和構建為在專門的、特定於應用的硬件上運行的代碼。
這裡說,它是為硬件設計的!用這種方式來表達這個定義,因為大多數嵌入式軟件設計師還沒有準備好放棄這個定義。現代成功的嵌入式軟件開發專家編寫的軟件是獨立於硬件的。對硬件進行抽象,以消除硬件依賴性並將硬件從應用程序代碼中分離出來。
硬件只是作為檢索、輸出和存儲數據的路徑。因此,LED應用不應直接訪問GPIO線路。相反,LED應用程序應該獲取表示LED的數據對象。然後,對數據進行處理,並在適當的時間傳遞給特定於硬件的例程,這些例程知道如何將LED對象映射到硬件並將其設置為正確的狀態。
僅僅根據數據來設計和構建嵌入式軟件是一個非常現代的概念,團隊應該充分利用這個概念。
嵌入式軟件定義結論
嵌入式軟件是為確定性運行而設計和構建的代碼,通常具有實時截止期,通過各種形式的輸入、處理、輸出和存儲來管理數據。
我們在今天的帖子中已經看到,通常用來描述嵌入式軟件的定義是不恰當的。這些定義沒有觸及嵌入式系統的核心,也沒有觸及我們在設計它們時應該關注的問題。然而,我們已經成功地澄清了事實,併為嵌入式軟件提供了幾個現代定義。我們還定義了幾個原則,嵌入式開發人員可以用來改進自己的嵌入式軟件設計。