傳達(dá)嵌入式軟件體系結(jié)構(gòu)設(shè)計意圖通常伴隨著基于嵌入式開發(fā)人員經(jīng)驗的假設(shè)。你可以從資源受限的基于微控制器的系統(tǒng)的角度來看架構(gòu)設(shè)計。如何設(shè)計架構(gòu)將取決于系統(tǒng)的嵌入式軟件分類。有許多不同的方法可以對嵌入式軟件進(jìn)行分類。我發(fā)現(xiàn)有五種簡單的嵌入式軟件分類可以幫助我調(diào)整視角,以更好地理解手頭的系統(tǒng)。
讓我們探索5種簡單的嵌入式軟件分類,你需要了解這些分類才能成功地進(jìn)行通信和設(shè)計你的系統(tǒng)。
分類1 — 裸機(jī)
裸金屬嵌入式系統(tǒng)利用不依賴于操作系統(tǒng)的軟件架構(gòu)。通常,裸金屬架構(gòu)將是事件驅(qū)動的,嚴(yán)重依賴狀態(tài)機(jī),和/或使用非常簡單的協(xié)作任務(wù)調(diào)度。開發(fā)人員需要非常了解底層處理器,因為沒有操作系統(tǒng)可以抽象出底層細(xì)節(jié)。
你通常會在資源受限的設(shè)備上找到裸機(jī)軟件設(shè)計,例如8位、16位和一些32位微控制器。但是,資源可用性并不是裸機(jī)系統(tǒng)的限制因素。你可以設(shè)計一個裸機(jī)架構(gòu),并在任何嵌入式處理器上實現(xiàn)。但是,處理器越復(fù)雜,實現(xiàn)就越復(fù)雜。
對于功能有限、使用資源受限的微控制器、具有嚴(yán)格的實時要求且對可擴(kuò)展性的需求最低的產(chǎn)品,建議嵌入式開發(fā)人員使用裸機(jī)架構(gòu)和實現(xiàn)。
分類2 — 實時操作系統(tǒng)(RTOS)
在過去幾年中,利用實時操作系統(tǒng)的嵌入式軟件架構(gòu)顯著增加?;赗TOS的嵌入式系統(tǒng)通常具有比裸機(jī)架構(gòu)所能管理的更復(fù)雜的時序要求。RTOS抽象了一些低級細(xì)節(jié),如任務(wù)調(diào)度,同時也為開發(fā)人員提供了任務(wù)同步(信號量和標(biāo)志)、數(shù)據(jù)保護(hù)(互斥鎖)和通信(隊列)的工具。
你通??梢栽?2位微控制器和小型應(yīng)用處理器上找到RTOS軟件設(shè)計。雖然你可以在16位處理器上找到它們,但RTOS通常需要至少24 KB的閃存和32 KB的RAM才能有效使用。這些要求對RTOS的有效使用設(shè)置了較低的限制。
RTOS會增加設(shè)計的復(fù)雜性,主要是在使用搶占式任務(wù)調(diào)度時。如果設(shè)計者不小心,就有可能導(dǎo)致線程饑餓、優(yōu)先級反轉(zhuǎn)甚至死鎖。然而,與裸機(jī)系統(tǒng)相比,RTOS可以為嵌入式開發(fā)人員提供快速擴(kuò)展系統(tǒng)、提高可維護(hù)性和收集更復(fù)雜的系統(tǒng)性能的能力。
對于具有復(fù)雜時序要求、使用現(xiàn)代微控制器、受益于多任務(wù)處理以及需要擴(kuò)展或重用應(yīng)用程序的產(chǎn)品,建議使用基于RTOS的體系結(jié)構(gòu)和實現(xiàn)。
分類3 — “完整”操作系統(tǒng)
當(dāng)使用足夠復(fù)雜的處理器(如應(yīng)用程序處理器)時,嵌入式軟件體系結(jié)構(gòu)可以利用整個操作系統(tǒng)。例如,嵌入式Linux可以被認(rèn)為是一個完整的操作系統(tǒng)。我沒有將RTOS包括在這一類別中,因為RTOS是一種專用的、資源受限的操作系統(tǒng),與嵌入式Linux不同。設(shè)計師可以完全訪問庫和操作系統(tǒng)資源,這是他們在開發(fā)桌面或移動應(yīng)用程序時所需要的。
你通常會在32位應(yīng)用程序處理器(如Raspberry Pi)上找到操作系統(tǒng)軟件設(shè)計。然而,這些處理器非常復(fù)雜,需要一個操作系統(tǒng)來管理它們的所有資源。現(xiàn)在,這并不意味著你不能裸奔或使用RTOS;這僅僅意味著復(fù)雜性和開發(fā)時間大大增加。
完整的操作系統(tǒng)可以減輕嵌入式開發(fā)人員的內(nèi)存限制負(fù)擔(dān)。此外,你通??梢宰尫乔度胧杰浖藛T參與進(jìn)來。對于構(gòu)建在操作系統(tǒng)上的應(yīng)用程序,軟件專業(yè)化要少得多。
對于沒有嚴(yán)格實時要求、使用現(xiàn)代微處理器、受益于高抽象級別、需要擴(kuò)展或重用應(yīng)用程序片段的產(chǎn)品,建議使用完整的操作系統(tǒng)架構(gòu)和實現(xiàn)。
分類4 — 容器/微服務(wù)
微服務(wù)和容器是云、移動和桌面計算中常見的設(shè)計類型。然而,他們正在迅速找到進(jìn)入嵌入式系統(tǒng)的途徑。我把這兩個放在一起,因為我們使用的架構(gòu)設(shè)計策略是相似的,盡管底層技術(shù)不同。
微服務(wù)公司
微服務(wù)將應(yīng)用程序構(gòu)造為松散耦合的服務(wù)的集合,可以獨立部署并且易于維護(hù)(如果做得好)。微服務(wù)將應(yīng)用程序構(gòu)建為為業(yè)務(wù)領(lǐng)域開發(fā)的小型自治服務(wù)的集合。微服務(wù)提供了一個松散耦合的服務(wù),并考慮了特定的特性。
在嵌入式開發(fā)中,相對資源受限的嵌入式系統(tǒng)(如微控制器)可以運行微服務(wù)。然而,它們通常需要至少相同數(shù)量的內(nèi)存來運行RTOS。微服務(wù)包括服務(wù)本身、入站和出站消息隊列以及日志和狀態(tài)信息。
微服務(wù)可以通過需要協(xié)調(diào)器和運行時環(huán)境來增加設(shè)計的復(fù)雜性。這絕不是破壞交易,但你必須小心使用資源,并仔細(xì)監(jiān)控系統(tǒng)的實時響應(yīng)。然而,微服務(wù)可以提供非??蓴U(kuò)展的系統(tǒng),易于現(xiàn)場維護(hù)和更新。
我建議在需要現(xiàn)場更新、可擴(kuò)展性和現(xiàn)代敏捷流程并受益于分布式模型的應(yīng)用程序中使用微服務(wù)。
容器
容器是一種可以托管微服務(wù)的實現(xiàn)范式。每個容器都是一個獨立的沙盒,可以運行一個或多個微服務(wù)。容器通??瑟毩⒉渴?,易于維護(hù)。一系列容器為更廣泛的應(yīng)用奠定了基礎(chǔ)。同樣,容器和微服務(wù)是密切相關(guān)的;容器為要運行的微服務(wù)提供了額外的隔離和分離層。
至少需要一個現(xiàn)代微控制器來利用容器。每個技術(shù)供應(yīng)商都略有不同,但有些嵌入式開發(fā)人員聲稱能夠使用與RTOS一樣少的內(nèi)存。然而,我調(diào)查過的大多數(shù)目標(biāo)物聯(lián)網(wǎng)應(yīng)用程序預(yù)計閃存大約為256 KB。
容器是一種現(xiàn)代體系結(jié)構(gòu)實現(xiàn),可以為嵌入式應(yīng)用程序增加靈活性、可擴(kuò)展性和可移植性。它們已成功地應(yīng)用于其他軟件領(lǐng)域數(shù)年。迄今為止,最大的限制是規(guī)模和性能。
我建議在需要現(xiàn)場更新、可擴(kuò)展性、額外安全性和現(xiàn)代敏捷流程的應(yīng)用程序中使用容器。
分類5 — 混合
混合系統(tǒng)同時利用多種分類。例如,你可能有一個使用嵌入式Linux的應(yīng)用程序處理器。然而,該處理器可能具有內(nèi)置微控制器,該微控制器使用裸機(jī)方法來管理實時響應(yīng)。
混合系統(tǒng)允許開發(fā)人員利用多種設(shè)計方法從多種系統(tǒng)類型中獲益。不幸的是,如果嵌入式開發(fā)團(tuán)隊不仔細(xì)管理其設(shè)計的各個部分之間的交互,這種靈活性往往會增加系統(tǒng)復(fù)雜性。
對于具有復(fù)雜處理和實時需求的產(chǎn)品,建議使用混合體系結(jié)構(gòu)和實現(xiàn),這些產(chǎn)品使用多核處理器,受益于高級別的抽象,并且需要擴(kuò)展或重用應(yīng)用程序。
結(jié)論
嵌入式軟件系統(tǒng)可分為多種類型。如何設(shè)計和構(gòu)建嵌入式軟件將取決于你選擇的分類。每個分類都將規(guī)定用于構(gòu)建和實現(xiàn)系統(tǒng)的設(shè)計模式和工具。在嵌入式開發(fā)人員設(shè)計或討論系統(tǒng)時,請先指定系統(tǒng)類型,然后再繼續(xù),會發(fā)現(xiàn)這個簡單的練習(xí)會幫助你找到正確的方向。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。