Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

辅助 crate 概览

在详细介绍编写应用程序所需的各种包和概念之前,先大致了解整个生态系统会有所帮助。这既包括 esp-hal 生态,也包括更广泛的嵌入式 Rust 生态。

esp-hal 生态系统

开展项目的第一步是创建项目,主要方式是使用 esp-generate。你可以在介绍此工具的章节中了解更多信息。

esp-hal 是使用 Rust 开发乐鑫芯片的核心 crate。通过它,你可以完成芯片的基本初始化,并访问芯片上的外设驱动。针对所选芯片的完整 esp-hal 文档会明确说明可用的外设,以及各外设驱动的稳定性。

你可能还需要使用芯片的高级功能,例如网络和连接能力。这部分由生态系统中的 esp-radio 负责,它整合了各种乐鑫产品上可用的通信协议驱动:Wi-Fi、BLE、esp-now,以及用于底层通信的 IEEE 802.15.4。各芯片的详细信息可在 esp-radio 子仓库中找到。需要注意,无线功能要求协议栈在后台持续运行,涉及定时器、中断和状态机等。esp-radio 依赖 esp-radio-rtos-driver 的实现,该驱动定义了协议栈可靠运行所需的调度和运行时接口。esp-rtos 是我们提供并支持的默认后端;原则上,你也可以将它替换为其他驱动实现。在启用相应的模板选项时,esp-generate 会自动加入 esp-rtos。

如果需要更深入地管理芯片内存,或在 no_std 中使用 alloc crate 提供的、需要堆分配的集合类型,可以使用 esp-alloc。本书有专门的章节介绍它。

下表简要介绍了 esp-hal 生态系统中的所有 crate 及其用途:

Crate描述稳定性
esp-alloc内存分配工具。不稳定
esp-backtrace提供回溯支持。不稳定
esp-bootloader-esp-idf为 ESP-IDF 二级 bootloader 提供额外支持,包括 OTA。不稳定
esp-build用于 esp-hal 和其他相关包的构建工具,供构建脚本使用。不稳定
esp-config配置系统。不稳定
esp-hal适用于所有乐鑫 ESP32 设备的裸机(no_std)HAL。稳定*
esp-hal-proc-macros用于 esp-hal 系列 HAL 包的过程宏。不稳定
esp-lp-hal适用于部分乐鑫设备上的低功耗和超低功耗核心的裸机(no_std)HAL。不稳定
esp-metadata乐鑫设备的元数据,主要供构建脚本使用。不稳定
esp-preempt线程与支持线程的同步原语,主要用于 esp-radio。不稳定
esp-println乐鑫设备的打印和日志功能。不稳定
esp-riscv-rt乐鑫 RISC-V CPU 的最小启动代码和运行时。不稳定
esp-rom-sysROM 代码支持。不稳定
esp-rtosesp-radio 的调度器实现,以及 esp-hal 的 embassy 支持。不稳定
esp-sync乐鑫设备的同步原语。不稳定
esp-storage乐鑫设备的存储工具。不稳定
esp-radio乐鑫设备的 Wi-Fi、BLE、IEEE 802.15.4 和 ESP-NOW 功能。不稳定
xtensa-lx对 Xtensa LX 处理器和外设的底层访问。不稳定
xtensa-lx-rtXtensa LX CPU 的最小启动代码和运行时。不稳定

Note

esp-hal 内部各外设驱动的稳定性有所不同。请参阅外设支持部分,了解各外设的稳定性详情。

你可以在 esp-rs 文档中找到这些包的详细信息。

与嵌入式 Rust 生态系统集成

嵌入式 Rust 领域最常用的硬件抽象层是 embedded-hal。它为多种外设提供了 trait,使你可以编写不依赖特定 HAL 的设备驱动。esp-hal 在其驱动中实现了这些 trait。此外,我们也实现了嵌入式 Rust 领域中其他 crate 提供的各种 trait,例如为随机数生成器(RNG)外设实现的 rand_core trait,以及 embedded-io trait。后者是面向 no_std 应用程序、与 std::io trait 对应的接口。