Rust 嵌入式首先需要熟悉 Embedded-HAL,最基础的5个模块有 Delay, IO, PWM, I2C, SPI,在 Embedded-HAL v0.2 版本里延迟用的是 Timer,最新 Embedded-HAL v1.0.0 删除 Timer 替换成了 Delay,而串口是在 embedded-io 里面,其他的模块还有 embedded-async,embedded-can,embedded-nb 等。
Rust Embedded-HAL 是由 Rust 嵌入式官方团队维护的,所以质量可以保证,不过 HAL 只是定义接口,具体的实现实在芯片的仓库,例如 nrf-hal,stm32-hal,使用 Embedded-HAL 就可以保证自己的代码是跨平台的,除了系统初始化相关的代码,每个芯片都不一样,例如 STM32 的时钟源配置。
Rust 嵌入式打印信息可以使用 RTT 或者 defmt,但是需要注意 defmt 是延迟打印,所以并不能用来调试,例如没有看见打印信息,并不代表错误就在打印的位置,因为打印会延迟一段时间,所以如果需要实时看见打印信息一般用 RTT 调试打印。
虽然 Rust 编译器会报错安全性问题,但是 Rust 编译器没有报错,并不代表代码没有问题,例如 Rust 嵌入式使用了 Singleton 设计模式,每一种硬件都只能有一个实例,避免在不同的代码位置同时修改硬件配置造成冲突,所以常见的 peripheral.take() 只能调用一次,第二次调用就会 panic。
这个视频只介绍了 Delay,后面视频会介绍其他模块,例如 IO,PWM,I2C,SPI。
GitHub 源码:
- BBC Microbit 例程: https://github.com/wuhanstudio/bbc-microbit-v2-rust-embedded-hal
- STM32 例程: https://github.com/wuhanstudio/stm32-bluepill-rust-embedded-hal
Rust 嵌入式开发合集:
https://www.youtube.com/playlist?list=PLlRCv8NaDaU-u1tqvVryAp9ZTb7rS_10Y
Rust 嵌入式系统合集:
https://www.youtube.com/playlist?list=PLlRCv8NaDaU8XxW7s7M4qfnb-dzwu5Qs9
00:00 Embedded-HAL 模块
03:52 Embedded-HAL 版本区别
05:32 Delay 模块
11:07 RTT 和 Defmt 打印区别
12:18 Rust 嵌入式安全性 (Singleton)
16:51 总结