CASE 07

Node02 真机部署 — 一个根因假设被对照实验推翻

扩展支线(权重刻意低配)。两个 BLOCKER:一个是 DMA 死锁的最小修复;一个是「屏上有色块无文字」,先被一份交接报告判成静态池耗尽,后被 Codex 离线审计的宿主对照实验推翻——真因是压缩位图字体但关闭了解码。

类别
嵌入式 / 硬件支线
时间跨度
2026-10-17 → 02-18
技术栈
ESP32-S3 · ESP-IDF v6 · LVGL 9 · NimBLE
状态
M2 离线层验收 PASS · M2-D 真机进行中

硬件是支线(审计结论:约 10 天周期、整体 PARTIAL、无日常联动),这里只收录两个由原始报告可复算的工程片段。

P1(BLOCKER,已修)· 首启显示死锁 + DMA TX underflow

根因:LVGL 绘制缓冲被放在 PSRAM(BSP use_psram=true),又被 QSPI DMA 直读;加上显示适配器任务无核绑定 → SPI 锁永久丢失。修法:移植 Node01 的 lcd_bands 方案——内部 RAM DMA 缓冲 + 固定 CPU0 发送。最小修复,不重构。

P2(BLOCKER)· 一次漂亮的推翻

交接报告原判「64 KB 静态池耗尽」。Codex 离线审计做了一个宿主侧对照实验:关闭字体解码时 4/4 位图返回 NULL——真因是「压缩位图字体但关闭了解码」,换分配器解决不了。同一个现象、两种根因假设、一个实验定胜负。

P3(MAJOR)· BLE 三处静默失败点

nus.c 两处(地址推断、服务注册)+ ble_source.c 一处直接丢弃返回值。没有报错,只是安静地没跑起来——「静默失败」在硬件侧最贵。

硬件认知 · 都是用失败换来的
  • Hash of data verified ≠ 设备持有镜像——必须独立回读比对
  • --after no-reset 会把设备留在 ROM 下载模式;DTR / RTS 也算设备动作;改固件会连带改 bootloader.bin
  • 设备端「真实批准」保持禁用,所有审批仅 SIMULATED;擦除 / eFuse 禁用
← Aegis Decision Benchmark — 一个被如实判死的项目Aegis Watchdog — 可靠性工程 →