嵌入式系統(tǒng)一直被認(rèn)為是現(xiàn)代技術(shù)的支柱,為從智能手機(jī)到汽車到家用電器的一切提供動力。盡管嵌入式系統(tǒng)在我們的日常生活中扮演著至關(guān)重要的角色,但在代碼開發(fā)方面,它仍然需要趕上其他技術(shù)領(lǐng)域。在本文中,我們將探討為什么會出現(xiàn)這種情況,并討論微服務(wù)理念如何幫助加速嵌入式開發(fā)。
MCU上的資源有限,可能性有限?
微控制器(MCU)具有有限的資源,這可能會限制開發(fā)和應(yīng)用的可能性。
由于它們經(jīng)常需要更多的內(nèi)存和計(jì)算能力,因此實(shí)現(xiàn)繁重的算法和功能具有挑戰(zhàn)性。你不要在42MHz,2kRAM的MCU上運(yùn)行Windows11!開發(fā)人員需要優(yōu)化他們的應(yīng)用程序,通過專門為其目標(biāo)開發(fā)來消耗更少的資源。這使得代碼不靈活或不適應(yīng)。同樣,你不能運(yùn)行Docker或任何虛擬化系統(tǒng),因?yàn)樗苤?,你需要訪問真實(shí)的硬件,而不是虛擬的硬件。
因此,嵌入式系統(tǒng)可能需要特定的工具來跟上技術(shù)進(jìn)步并滿足用戶不斷增長的需求和期望,這可能是一個很大的缺點(diǎn)。例如,隨著物聯(lián)網(wǎng)的發(fā)展和擴(kuò)大,對具有尖端連接和計(jì)算能力的嵌入式設(shè)備的需求肯定會更大。提高他們能力的一種方法是考慮制作在互聯(lián)網(wǎng)上運(yùn)行的功能,但這變得很困難,因?yàn)檫B接并不總是有保證的——你可能會失去連接,或者在某些困難的情況下被禁止。
這種系統(tǒng)臨界性使得嵌入式開發(fā)人員更喜歡使用舊的但經(jīng)過驗(yàn)證的技術(shù),以避免可靠性意外。
隨著時間的推移,MCU上有限的資源也可能使維護(hù)和更新嵌入式系統(tǒng)變得更加困難。正因?yàn)槿绱?,我們正在?chuàng)建我們的開源產(chǎn)品,以盡可能使用最少的系統(tǒng)資源。許多其他操作系統(tǒng)選項(xiàng),如ROS,需要更多的資源,對于目前可用的最小設(shè)備來說是不夠的。
由超定制需求驅(qū)動的整體理念
事實(shí)上,嵌入式系統(tǒng)經(jīng)常被創(chuàng)建為針對特定目的或任務(wù)集合進(jìn)行非常專業(yè)和優(yōu)化的,這是開發(fā)如此落后的主要原因之一。這種超定制的理念導(dǎo)致一切從頭開始重新制作,并導(dǎo)致單片代碼,因?yàn)槟愕膬?yōu)先事項(xiàng)是使某些東西工作,而不是開發(fā)一個適應(yīng)的、可靠的、優(yōu)化的和可伸縮的代碼架構(gòu)。
我們經(jīng)??吹焦I(yè)版模塊化架構(gòu)的夢想,但沒有時間這樣做——特別是因?yàn)樗赡軙p害大量工作代碼。所以最終,模塊化架構(gòu)的想法沒有實(shí)現(xiàn)。
這使得在不實(shí)質(zhì)性改變當(dāng)前系統(tǒng)的情況下整合新技術(shù)或新功能變得非常困難。這種設(shè)計(jì)方法導(dǎo)致缺乏模塊化和可重用性,最終減慢了開發(fā)過程,并增加了對原始設(shè)計(jì)進(jìn)行更改時出現(xiàn)錯誤和缺陷的可能性。加劇這一問題的是,許多嵌入式系統(tǒng)使用專有的硬件和軟件,這可能會限制嵌入式開發(fā)開發(fā)人員對底層代碼的訪問和控制。因此,嵌入式系統(tǒng)傾向于更慢地采用新技術(shù)。它們可能不如利用更模塊化和更靈活的方法創(chuàng)建的系統(tǒng)靈活。
組件的多樣性使整個系統(tǒng)變得復(fù)雜
這些系統(tǒng)種類繁多是嵌入式系統(tǒng)發(fā)展緩慢的另一個原因。嵌入式系統(tǒng)有大量的硬件和軟件組件,所有這些組件在使用前都需要仔細(xì)集成和測試。復(fù)雜設(shè)備意味著多個電路板使用專用或定制的網(wǎng)絡(luò)交換信息,有時甚至在同一產(chǎn)品中使用多種不同的網(wǎng)絡(luò)技術(shù)。同樣,所有這些都需要進(jìn)行大規(guī)模測試。
這可能是一個勞動密集型且容易出錯的過程,會減慢開發(fā)周期,并使快速實(shí)現(xiàn)新功能或新技術(shù)變得非常困難。由于其復(fù)雜性,創(chuàng)建和管理系統(tǒng)可能具有挑戰(zhàn)性,因?yàn)榭赡苄枰囟ǖ闹R和經(jīng)驗(yàn)來理解每個組件如何作為一個整體進(jìn)行交互和運(yùn)行。
對實(shí)時應(yīng)用的需求給嵌入式領(lǐng)域增加了另一層重要的復(fù)雜性。最重要的是,你不能像在正常的軟件調(diào)試過程中那樣容易地從運(yùn)行的嵌入式代碼中提取信息。事實(shí)上,同樣的人機(jī)界面在嵌入式(屏幕、鍵盤、互聯(lián)網(wǎng))中是不存在的。結(jié)果,調(diào)試和測試變得更加困難。我們看不到正在發(fā)生的事情。
像Luos這樣的方法旨在為用戶提供將系統(tǒng)活動實(shí)時視為數(shù)字孿生的能力。你可以使用Luos創(chuàng)建實(shí)際系統(tǒng)的數(shù)字復(fù)制品,以測試和觀察任何潛在的問題。
讓我們將微服務(wù)的愿景應(yīng)用于這些問題
如今,嵌入式系統(tǒng)依賴于連接的子系統(tǒng)。我們稱之為網(wǎng)絡(luò)物理系統(tǒng)(CPS)。但獨(dú)立的子系統(tǒng)并不意味著你不是單片的,你可能有不可能維護(hù)的單片子組件,也不直接與其他組件兼容。此外,為了連接整個系統(tǒng)的所有部分,嵌入式開發(fā)人員需要創(chuàng)建一個經(jīng)過調(diào)整的通信系統(tǒng),這可能需要花費(fèi)大量時間才能使其可靠。你可能無法將其用于其他產(chǎn)品。
由于設(shè)計(jì)更改、產(chǎn)品可用性或任何其他外部變量,這種靈活性的缺乏導(dǎo)致許多與我們互動的開發(fā)人員重做他們的整個系統(tǒng)(數(shù)月的工作)。半導(dǎo)體危機(jī)是眾多僵化舉措的一個典型例子,這些舉措僅僅因?yàn)榧嫒菪詥栴}而被迫戛然而止。
網(wǎng)絡(luò)物理系統(tǒng)可以利用許多緊湊、自主的服務(wù)來創(chuàng)建,這些服務(wù)由于微服務(wù)而易于組合和修改。我們必須把嵌入式系統(tǒng)看作一種產(chǎn)品,而不是一塊板。
近年來,微服務(wù)哲學(xué)在軟件行業(yè)越來越受歡迎,這為解決這些同樣的問題提供了補(bǔ)救措施。微服務(wù)將軟件應(yīng)用程序分離為可管理的、自包含的部分,這些部分可以獨(dú)立創(chuàng)建、部署和擴(kuò)展。因此,開發(fā)人員可以輕松地添加新功能或技術(shù),而無需對當(dāng)前系統(tǒng)進(jìn)行大的調(diào)整。微服務(wù)的模塊化設(shè)計(jì)也使測試和實(shí)現(xiàn)新功能變得更簡單,這有助于縮短開發(fā)周期。但正如本文開頭所提到的,我們不能在嵌入式世界中使用相同的工具。像Luos項(xiàng)目這樣的開源努力正在創(chuàng)造未來所需的工具。
延遲問題
在嵌入式系統(tǒng)中使用微服務(wù)可能存在一定的延遲問題。在考慮微服務(wù)時,開發(fā)人員可能會想到管理各種服務(wù)之間通信的延遲?;谖⒎?wù)的系統(tǒng)將需要在服務(wù)之間進(jìn)行一種板間IPC(進(jìn)程間通信),這可能會導(dǎo)致延遲。嵌入式開發(fā)人員可以通過測量延遲并使其對實(shí)時應(yīng)用程序具有確定性來管理延遲。通過使用時間戳,它將允許你以數(shù)學(xué)方式計(jì)算延遲。我們可以使用排隊(duì)和調(diào)度等策略來確保請求得到一致處理,并使延遲具有確定性。
市場需求
嵌入式系統(tǒng)的設(shè)計(jì)和構(gòu)建通常是為了滿足短期需求,但需要長期維護(hù)。因此,解決某些標(biāo)準(zhǔn)可能優(yōu)先于添加可能需要一些時間才能變得必要或重要的新技術(shù)或功能。嵌入式系統(tǒng)適應(yīng)不斷變化的環(huán)境或不斷發(fā)展的需求的能力可能會受到這種對實(shí)現(xiàn)精確目標(biāo)的強(qiáng)調(diào)的阻礙。
在研發(fā)程序經(jīng)常受到限制的情況下,從長遠(yuǎn)來看,考慮一個嵌入式項(xiàng)目需要更多的時間,從而需要更多的資金。因此,嵌入式系統(tǒng)可能難以跟上技術(shù)進(jìn)步??紤]使事物具有適應(yīng)性總是比在給定時間產(chǎn)生滿足需求的系統(tǒng)更復(fù)雜。
此外,市場需求可能會迫使嵌入式系統(tǒng)開發(fā)采用同樣久經(jīng)考驗(yàn)的方法,這最終可能會使靈活性和互操作性面臨挑戰(zhàn)。
到目前為止,已有一些項(xiàng)目試圖建立一個“開發(fā)標(biāo)準(zhǔn)”,但很少有項(xiàng)目能在受嵌入式系統(tǒng)影響的各個領(lǐng)域真正獲益。開源哲學(xué)可以成為一種解決方案。開源的使用保證了無論發(fā)生任何意外事件(公司崩潰或出售),你都可以長期維護(hù)你的系統(tǒng)。它由嵌入式開發(fā)人員社區(qū)維護(hù),可以更好地適應(yīng)你的需求,更新最新功能,并在開發(fā)方面具有靈活性。
以更可持續(xù)的方式發(fā)展
通過使用更可持續(xù)的方法,嵌入式系統(tǒng)的開發(fā)可以變得更加靈活和適應(yīng)性,以及更加有效和資源高效。這種方法意味著開發(fā)可根據(jù)你的需求重復(fù)使用的代碼,而不僅僅是當(dāng)前的特定項(xiàng)目。這種可重用性可以應(yīng)用于系統(tǒng)中的代碼或組件,并且應(yīng)該從可重用性的角度進(jìn)行長期考慮,而不僅僅是針對當(dāng)前的特定項(xiàng)目。
通過將你的全局系統(tǒng)劃分為小代碼塊來開發(fā)你的項(xiàng)目,也將允許隨著時間的推移進(jìn)行更好的維護(hù)。這種維護(hù)將針對系統(tǒng)的單個元件,這樣就不會改變整個系統(tǒng)的其他功能。
總結(jié)
總之,由于其復(fù)雜性、專業(yè)性以及對專有硬件和軟件的依賴,嵌入式系統(tǒng)在發(fā)展方面落后于其他技術(shù)領(lǐng)域。然而,通過使用微服務(wù)或數(shù)字孿生等方法來思考一種新的系統(tǒng)開發(fā)方式,可以幫助開發(fā)人員在日常生活中發(fā)揮作用。
利用這種微服務(wù)的理念,我們正在創(chuàng)建一個開源項(xiàng)目,以增加嵌入式系統(tǒng)的靈活性。我們創(chuàng)建的許多工具可以幫助嵌入式開發(fā)人員更快、更輕松地編寫代碼。