v2.4.2 — 烧录前检查固件契约,缺令牌时不再白等 15 秒
变化
以前的固件契约检查(有没有打印通过令牌、有没有调用 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()的签名保持不变