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