如果你正在開發一個嵌入式系統,你可能會希望編寫與你的硬件解耦和獨立的代碼。將硬件從應用程序中抽象出來有很多好處,比如使軟件可重用、可移植和易于維護。我們最常用的方法是通過硬件抽象層(HAL)。
困擾采用Rust的嵌入式軟件開發人員的一個問題是,硬件抽象層還沒有正式發布。這意味著你要么開發了自己的非標準HAL,要么采用了Rust嵌入式工作組(Embedded WG)。存在的嵌入式HAL正在開發中,對它所做的更改是“突破性的更改”,如果你使用它們,可能會導致代碼的重大返工。
嵌入式工作組已經正式發布了一個穩定的1.0版嵌入式hal板條箱。你可以把一個板條箱想象成一個包或者庫。在這種情況下,嵌入式hal板條箱提供的接口稱為Rust中的traits,用于與GPIO、USART、SPI和I2C等常見外設進行交互。你可以在嵌入式hal板條箱上構建自己的庫,從而產生獨立于硬件的代碼!應用程序代碼的硬件獨立性將有助于在開發機器或目標硬件上運行代碼。
那么,這對嵌入式開發者意味著什么呢?
希望以標準方式與微控制器硬件交互的開發人員和團隊現在有了這種方式!嵌入式hal 1.0側重于為你提供編寫通用驅動程序的機制,而不是提供標準的HAL APIs。他們還提供了幾個穩定的配套機箱,如embedded-hal-bus、embedded-hal-async和embedded-hal-nb。這些為不需要堆或動態分派的異步接口提供了機制。對于那些對開發避免動態內存分配的實時應用程序感興趣的人來說,這是顯而易見的特性。
開發嵌入式系統的一個主要問題是,我們經常必須多年維護我們的代碼。事實上,現在板條箱是穩定的,并且只有創建1.x版本的計劃,這意味著我們開發人員不必擔心他們的應用程序因改變接口而中斷。毫無疑問,隨著它現在的穩定,我們將開始看到許多如何正確使用這些接口的例子,這將增加在嵌入式應用程序中使用Rust的興趣。我們也將開始看到增加的額外接口,這將使使用Rust以硬件不可知的方式與底層硬件進行交互變得更加容易。
嵌入式hal 1.0的發布會不會成為引發更多嵌入式軟件團隊認真考慮Rust的火花?只有時間能證明一切。