主题

Embedded Rust

Embedded Rust 表示 Rust 代码运行在 MCU、driver、firmware 或硬件 bring-up 环境中,通常涉及 no_std、Embassy、esp-hal、STM32/ESP32、probe-rs、espflash 或 embedded-hal。它不是所有 Rust 项目的泛化标签。

  • 硬件

目录

Definition

Embedded Rust 表示 Rust 代码运行在 MCU、driver、firmware 或硬件 bring-up 环境中,通常涉及 no_std、Embassy、esp-hal、STM32/ESP32、probe-rs、espflash 或 embedded-hal。它不是所有 Rust 项目的泛化标签。

这个 Topic 要保留的是硬件运行环境对代码、工具链和验证方式的约束:target triple、HAL、probe/serial backend、flash artifact、board wiring、feature flags 和真实硬件缺口都比普通 Rust service 更重要。项目快照必须说明 Rust 是跑在 MCU/driver 侧,还是仅作为 host/backend 工具存在(projects/loadlynx.md、projects/gc9d01-rs.md)。

When to use

当 Cargo.toml、firmware 目录或 README 明确说明 MCU/driver/board 目标时使用。若 Rust 只是后端服务,应使用 Rust web service。

如果改动需要 probe-rs、espflash、Embassy executor、embedded-hal traits、no_std display/bus driver、board support package 或硬件在环验证,就应命中本 Topic。若证据只显示 Axum/Tokio/SQLx HTTP 服务,哪怕语言是 Rust,也应归入 Rust web service 而非 embedded(projects/codex-vibe-monitor.md)。

Habits / defaults

  • 把 flashing/debug backend 的关键参数与项目配置或 manifest 一起维护,避免每次 Agent 猜命令。
  • 双 MCU 项目要保留 target 边界;projects/loadlynx.md 区分 STM32G431 analog 和 ESP32-S3 digital。
  • driver crate 要保留 embedded-hal/embedded-graphics feature 语义;projects/gc9d01-rs.md 是代表。
  • 硬件项目的 CI build 不等价于硬件验证,snapshot 要保留证据缺口。
  • 记录 toolchain 和 flashing path 时要引用配置或 manifest,避免 Agent 从主机环境猜命令。Cargo.toml、.cargo/config*、README 的 board 说明都属于关键证据(projects/loadlynx.md、projects/pd-sink-stm32g431cbu6-rs.md)。
  • driver crate 的 reusable decision 往往在 feature flags、trait bounds 和示例中,而不是在 UI 或 release workflow;写项目快照时要把 embedded-hal、embedded-graphics、I2C/SPI bus 语义单独提出来(projects/gc9d01-rs.md)。
  • 涉及真实板子的结论默认标明验证层级:编译通过、成功 flash、串口日志正常、外设行为正确是四种不同证据,不能互相替代(projects/loadlynx.md)。

Reference implementations

  • projects/loadlynx.md:STM32G431 + ESP32-S3 分体式电子负载,适合说明多 target 边界、各自 artifact 和板级验证证据不能混写。
  • projects/flux-purr.md:ESP32-S3 firmware 与 host preview 共存,适合说明 firmware 编译、设备验证和 React console 验证是三条不同链路。
  • projects/pd-sink-stm32g431cbu6-rs.md:USB PD sink / PowerVista firmware,适合说明 STM32 target、probe/backend 参数和硬件行为缺口如何进入项目快照。
  • projects/gc9d01-rs.md:no_std display driver crate,适合说明 embedded-hal、feature flags、总线接口和 host-side 测试之间的边界。
  • projects/mains-aegis.md:firmware、Web UI 与文档共存的设备项目,适合说明 Rust 固件知识不能被 Web 服务或管理界面知识覆盖。

Failure modes

  • 把 embedded Rust 与 Rust web service 混淆,会让 Agent 跑错验证工具。
  • 没有硬件证据却声称 feature 完成,会污染项目记忆。
  • path/submodule 依赖升级可能破坏 toolchain。
  • 只跑 cargo test 或 host build 就声明硬件行为正确,是 embedded 项目最常见的虚假完成。项目快照应明确哪些结论来自编译,哪些仍需要板级验证(projects/loadlynx.md)。
  • flash 命令散落在 README 或 shell history,会造成刷错芯片、串口冲突或 probe 争用;应把 backend、chip、artifact 和 selector 写进 checked-in project configuration,并与 MCU flashing integration 一起维护(projects/loadlynx.md)。

Evidence index

  • projects/loadlynx.md
  • projects/flux-purr.md
  • projects/pd-sink-stm32g431cbu6-rs.md
  • projects/gc9d01-rs.md