Skip to content

v2.4.2 — 烧录前检查固件契约,缺令牌时不再白等 15 秒

Choose a tag to compare

@TaoCosmo-Dev TaoCosmo-Dev released this 27 Sep 11:23
· 4 commits to main since this release

变化

以前的固件契约检查(有没有打印通过令牌、有没有调用 cm_backtrace_init()、有没有串口输出函数)只在超时之后才运行。固件忘了打印通过令牌时,每次都要先烧录,再干等满 15 秒,报告才说出原因。

现在编译通过后、烧录之前就检查一次,结果写在日志开头:

情况 以前 现在
源码里找不到通过令牌 烧录 → 等满 15 秒 → 超时报告 烧录 → 只等 3 秒(用来抓崩溃)→ 超时报告,并注明原因
固件契约已满足 — 多一次源码扫描,毫秒级

不拦截任何步骤:编译、烧录、串口捕获、SWD 读故障寄存器照常执行,退出码不变。令牌如果放在工程目录之外,设 test.precheck_firmware: false 即可恢复原来的行为。

新增配置项(test 节):

precheck_firmware: true
no_token_wait_seconds: 3

评估后决定不做:编译前检查 RTE 芯片包

原计划在编译前检查 RTE 引用的芯片包是否已安装,以防 Keil 弹窗卡住,最坏要等满 600 秒的编译超时。在 MDK 5.24a 上实测了两种情况:

情况 结果
RTE 引用的 CMSIS 版本本机没有 自动改用已安装的版本,正常编译,约 3.5 秒
整个芯片支持包(DFP)都没装 按工程里保存的设置照常编译,约 3.8 秒

两种情况都不弹窗、不卡住,这个检查省不下任何时间,所以没有加。

其他

  • 离线测试:128 → 132 项
  • firmware_precheck() 扫描一次源码,同时返回问题清单和「是否找到通过令牌」;check_firmware_contract() 的签名保持不变