如果你正在开发一个嵌入式系统,你可能会希望编写与你的硬件解耦和独立的代码。将硬件从应用程序中抽象出来有很多好处,比如使软件可重用、可移植和易于维护。我们最常用的方法是通过硬件抽象层(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的火花?只有时间能证明一切。