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