和 embassy 连起来
本站自己不跑嵌入式代码,所以这一部分代替其他卷的「在本站中」:把 embassy 卷的固件接到 probe-rs 的工作流上。embassy 卷的实验跑在 QEMU 的 b-l475e-iot01a(STM32L475VG)上,输出走 semihosting;这里讲换成真板子、换成 defmt 之后,probe-rs 这一侧发生了什么。三章:
- cargo runner 与 defmt 三件套:
runner = "probe-rs run --chip …"之后cargo run变成什么;defmt、defmt-rtt、panic-probe各自往 ELF 和 RAM 里放了什么,probe-rs 读哪一样;probe-rs run怎么认出embedded-test的固件、一条条跑用例。 - 从 QEMU 换到真板子:embassy 卷的
ticker固件改成真板子版本要动的六处(运行器、链接脚本、HAL 补丁、时间驱动、日志、panic),改完离线编译通过;debug::exit在 probe-rs 下照样能结束run。 - VS Code 调试配置:
launch.json的每个字段对应 DAP server 里哪个结构体的哪个字段,哪些有默认值、哪些组合会被拒绝;RTT 窗口默认不开。
flowchart TB fw["embassy 固件:defmt、defmt-rtt、panic-probe"] --> cargo["cargo run / cargo test"] cargo -->|"runner:probe-rs run --chip"| run["probe-rs run:烧录、轮询"] run --> rtt["读 _SEGGER_RTT,defmt 在客户端解码"] run --> hf["panic-probe:udf 进 HardFault,打印调用栈"] run --> et["embedded-test:每个用例复位一次"] vscode["VS Code:launch.json"] --> dap["probe-rs dap-server"] dap --> rtt
本部分的实验都不需要硬件:固件只交叉编译(thumbv7em-none-eabihf,依赖从本机缓存离线取),用目标文件工具看 ELF 里有什么,再用本机的 probe-rs 0.32.0 跑一次 cargo run,看它停在哪一步。固件真正跑起来以后的输出(defmt 日志、HardFault 的调用栈、embedded-test 的报告、VS Code 里的断点)待实测,已登记在硬件待测清单。
💬 关联讨论
发起讨论加载中...