裸机开发 (no_std)

嵌入式 Rust 开发人员可能更熟悉使用 no_std;它不使用 stdRust 标准库 )而是使用一个子集,即核心库。 The Embedded Rust Book 对此有很大的介绍

重要的是要注意,由于 no_std 使用的 Rust 核心库Rust 标准库的一个子集,因此 no_std crate 可以在 std 环境中编译,但反之则不然。因此,在创建 crate 时,如果它需要标准库才能运行,则值得牢记。

当前支持

下表涵盖了目前不同乐鑫产品对 no_std 的支持情况。

HALWi-Fi/BLE/ESP-NOWBacktraceStorage
ESP32
ESP32-C2
ESP32-C3
ESP32-C6
ESP32-S2
ESP32-S3
ESP32-H2

注意:

  • ✅ 在 Wi-Fi/BLE/ESP-NOW 中表示目标至少支持所列技术之一。有关详细信息,请参阅 esp-wifi 存储库的当前支持表。
  • ESP8266 HAL 处于维护模式,不会对该芯片进行进一步开发。

相关的 esp-rs crates

RepositoryDescription
esp-rs/esp-hal硬件抽象层
esp-rs/esp-pacs外设访问
esp-rs/esp-wifiWi-Fi, BLE 和 ESP-NOW 支持
esp-rs/esp-alloc简单的堆分配器
esp-rs/esp-printlnprint!, println!
esp-rs/esp-backtrace异常和 panic 处理
esp-rs/esp-storage访问未加密闪存的嵌入式存储特性

当您可能想使用裸机时(no_std

  • 小内存占用:如果您的嵌入式系统资源有限并且需要小内存占用,您可能希望使用裸机,因为 std 功能会增加大量的最终二进制文件大小和编译时间。
  • 直接硬件控制:如果您的嵌入式系统需要对硬件进行更直接的控制,例如低级设备驱动程序或访问专门的硬件功能,您可能希望使用裸机,因为 std 添加了抽象,这会使直接与硬件交互变得更加困难。
  • 实时约束或时间关键型应用程序:如果您的嵌入式系统需要实时性能或低延迟响应时间,因为 std 会引入不可预测的延迟和开销,从而影响实时性能。
  • 自定义要求:裸机允许对应用程序的行为进行更多自定义和细粒度控制,这在专用或非标准环境中很有用。