對(duì)更安全的邊緣軟件的需求一直在推動(dòng)政府和大型企業(yè)的努力采用Rust,Rust為開發(fā)人員提供了許多好處,例如:
l 沒(méi)有垃圾收集的內(nèi)存安全
l 并發(fā)
l 現(xiàn)代工具
當(dāng)你結(jié)合所有這些優(yōu)點(diǎn)時(shí),你會(huì)發(fā)現(xiàn)你可以編寫更安全和更高質(zhì)量的軟件。雖然嵌入式開發(fā)人員可能不愿意學(xué)習(xí)Rust,但它通常被稱為“零成本抽象”語(yǔ)言,因?yàn)樗焖俣咝А?/span>
讓我們探討一下使用Rust開發(fā)嵌入式軟件時(shí)可以使用的五個(gè)運(yùn)行時(shí)。
1、使用no_std的裸機(jī)
就像在C和C++中一樣,你可以編寫裸機(jī)Rust代碼。默認(rèn)情況下,Rust將包括許多運(yùn)行時(shí)功能,如動(dòng)態(tài)分配堆、集合、堆棧溢出保護(hù)、初始化代碼和libstd。雖然這對(duì)于桌面、移動(dòng)或服務(wù)器應(yīng)用程序來(lái)說(shuō)很好,但對(duì)于嵌入式應(yīng)用程序來(lái)說(shuō)開銷很大。
相反,你可以使用指令 #![no_std] 作為將禁用所有這些功能的機(jī)箱級(jí)屬性。使用no_std告訴Rust編譯器不要使用std-crate,而是使用包含libcore但沒(méi)有堆、集合、堆棧溢出保護(hù)等的裸機(jī)實(shí)現(xiàn)。
no_std屬性非常適合希望以與C和C++中相同的裸機(jī)形式編寫嵌入式軟件的開發(fā)人員。
2、實(shí)時(shí)中斷驅(qū)動(dòng)的并發(fā)性(RTIC)
RTIC代表實(shí)時(shí)中斷驅(qū)動(dòng)并發(fā),是一個(gè)專門為使用Rust編程語(yǔ)言構(gòu)建實(shí)時(shí)嵌入式應(yīng)用程序而設(shè)計(jì)的框架。RTIC主要針對(duì)裸機(jī)系統(tǒng),并利用Rust的零成本抽象和類型安全來(lái)提供一個(gè)并發(fā)執(zhí)行環(huán)境,在該環(huán)境中,任務(wù)根據(jù)其硬件中斷進(jìn)行管理和優(yōu)先級(jí)排序。
RTIC框架通過(guò)以最小的開銷和可預(yù)測(cè)的行為處理任務(wù),確保應(yīng)用程序滿足實(shí)時(shí)保證。RTIC特別適合要求嚴(yán)格時(shí)序約束和高可靠性的應(yīng)用,例如汽車系統(tǒng)、工業(yè)自動(dòng)化和其他嵌入式控制系統(tǒng)。由于Rust的所有權(quán)和類型系統(tǒng),該框架簡(jiǎn)化了對(duì)共享資源的處理,并通過(guò)設(shè)計(jì)防止了數(shù)據(jù)競(jìng)爭(zhēng)。
3、異步嵌入式hal
異步嵌入式hal是Rust嵌入式hal(硬件抽象層)項(xiàng)目的實(shí)驗(yàn)性擴(kuò)展,為支持嵌入式系統(tǒng)中的異步編程而定制。它旨在彌合標(biāo)準(zhǔn)嵌入式hal通常提供的同步操作與現(xiàn)代嵌入式應(yīng)用的需求之間的差距,后者可以從非阻塞、異步I/O操作中受益。
異步嵌入式hal允許開發(fā)人員在基于微控制器的系統(tǒng)上編寫效率更高、響應(yīng)速度更快的應(yīng)用程序,因?yàn)樵谶@種系統(tǒng)中,阻塞操作在功耗和性能方面代價(jià)很高。通過(guò)將async/await語(yǔ)義集成到HAL中,異步嵌入式hal使讀取傳感器、網(wǎng)絡(luò)通信或與外設(shè)交互等任務(wù)在不停止微控制器的情況下執(zhí)行成為可能。結(jié)果是提高了系統(tǒng)同時(shí)處理多個(gè)任務(wù)的能力。
開發(fā)異步嵌入式hal利用了Rust強(qiáng)大的異步編程特性,主要用于web和服務(wù)器應(yīng)用程序,并使它們適應(yīng)嵌入式系統(tǒng)的受限環(huán)境。這包括為SPI、I2C和USART等標(biāo)準(zhǔn)嵌入式接口提供異步特性。
在這種情況下,異步編程允許任務(wù)產(chǎn)生控制而不是阻塞,這在任務(wù)在優(yōu)先級(jí)和響應(yīng)時(shí)間要求上有很大差異的系統(tǒng)中尤其有益。例如,像處理關(guān)鍵傳感器輸入這樣的高優(yōu)先級(jí)任務(wù)可以搶占像將數(shù)據(jù)記錄到存儲(chǔ)設(shè)備這樣的低優(yōu)先級(jí)任務(wù)。挑戰(zhàn)和創(chuàng)新在于實(shí)現(xiàn)這些特性,遵守嵌入式設(shè)備典型的嚴(yán)格尺寸和性能限制,同時(shí)不犧牲Rust自然提供的安全性和并發(fā)性優(yōu)勢(shì)。這種方法不僅簡(jiǎn)化了開發(fā)過(guò)程,還提高了嵌入式應(yīng)用程序的可伸縮性和可維護(hù)性。
4、Embassy
Embassy是完全在Rust中構(gòu)建的嵌入式系統(tǒng)的異步運(yùn)行時(shí)。它是專門為滿足嵌入式設(shè)備典型的資源受限環(huán)境的需求而設(shè)計(jì)的,利用Rust的異步/等待功能來(lái)實(shí)現(xiàn)高效、無(wú)阻塞的I/O操作。
Embassy是希望在微控制器上實(shí)現(xiàn)復(fù)雜應(yīng)用的開發(fā)人員的理想選擇,傳統(tǒng)的同步阻塞會(huì)導(dǎo)致有限計(jì)算資源的低效使用。Embassy提供了一個(gè)支持各種嵌入式平臺(tái)的框架,為嵌入式系統(tǒng)中的并發(fā)執(zhí)行提供了一種可擴(kuò)展且安全的方法。該運(yùn)行時(shí)利用了Rust的可預(yù)測(cè)性能特性,確保任務(wù)的執(zhí)行沒(méi)有傳統(tǒng)多任務(wù)操作系統(tǒng)的開銷。
Embassy的關(guān)鍵優(yōu)勢(shì)之一是其可擴(kuò)展性以及與各種設(shè)備外圍設(shè)備的輕松接口。運(yùn)行時(shí)通過(guò)管理異步任務(wù)和事件來(lái)優(yōu)化功耗和處理時(shí)間,從而有助于創(chuàng)建響應(yīng)迅速且可靠的應(yīng)用程序。例如,開發(fā)人員可以同時(shí)處理多個(gè)通信協(xié)議,而不需要在更通用的編程環(huán)境中常見的復(fù)雜和資源密集型線程機(jī)制。
Drone OS
Drone OS是一款完全用Rust編寫的尖端嵌入式操作系統(tǒng),專門為ARM Cortex-M微控制器上的實(shí)時(shí)應(yīng)用程序而設(shè)計(jì)。通過(guò)利用Rust的安全功能和零成本抽象,Drone OS為開發(fā)需要精確計(jì)時(shí)和資源效率的高性能嵌入式軟件提供了一個(gè)強(qiáng)大的平臺(tái)。
該操作系統(tǒng)有助于低級(jí)硬件訪問(wèn),同時(shí)保持高安全性,最大限度地降低了嵌入式開發(fā)中常見的錯(cuò)誤和內(nèi)存錯(cuò)誤風(fēng)險(xiǎn)。Drone OS以其模塊化設(shè)計(jì)和對(duì)并發(fā)編程的支持在嵌入式系統(tǒng)領(lǐng)域脫穎而出,使其成為尋求在現(xiàn)代嵌入式系統(tǒng)的苛刻環(huán)境中創(chuàng)建可擴(kuò)展、可靠和可維護(hù)的實(shí)時(shí)應(yīng)用程序的開發(fā)人員的理想選擇。
結(jié)語(yǔ)
Rust是一種令人興奮的語(yǔ)言,它提供了內(nèi)存安全、安全性、并發(fā)性以及可用于開發(fā)嵌入式應(yīng)用程序的現(xiàn)代工具鏈。目前,使用Rust構(gòu)建嵌入式應(yīng)用并不只有一種方式。我們探索了幾種不同的運(yùn)行時(shí),從更傳統(tǒng)的裸機(jī)方法到操作系統(tǒng)。
如果你探索這些運(yùn)行時(shí),你會(huì)發(fā)現(xiàn)它們可以幫助你比你想象的更快地啟動(dòng)和運(yùn)行。但是,不要以為它們是完整的運(yùn)行時(shí)。根據(jù)你的選擇,你可能會(huì)發(fā)現(xiàn)并非所有功能都能達(dá)到你的預(yù)期水平。
Rust已經(jīng)存在了大約十年,但它仍在不斷發(fā)展。從嵌入式的角度來(lái)看,你可以用它做很多事情,但仍有許多未知因素。不要讓這阻止你學(xué)習(xí)這門豐富而令人興奮的語(yǔ)言。