Files
STM32F4-Base/App/app
wandering1 c5227291bd test(fw-stamp): 身份戳覆盖测试宏——头依赖 + suite/dstr 变体串
问题:__DATE__/__TIME__ 只在所属 TU 被重编时才刷新,而 app_main.c 不依赖
test/board/test_config.h → 只切套件宏的增量构建不重编它,测试镜像与产品
镜像顶着同一个 fw build: 戳,@test 的戳校验对"两种构建互换"完全失明
(2026-10-11 N-31 复测实测:两者戳同为 Oct 11 2026 14:44:11,只有
-CmpFile 回读才发现镜像不同)。

修复(App/app/app_main.c,两条防线):
- #include "test_config.h" 建立头依赖 → 改 TEST_SUITE_* /
  ENABLE_DESTRUCTIVE_TESTS 必重编本 TU,戳必刷新(根因修复)
- 戳串追加 FW_BUILD_VARIANT = " suite=<TEST_SUITE_NAME> dstr=<on|off>"
  → 戳内容本身区分构建,时间撞车也能分辨

实测:产品 20:36:11 suite=NONE dstr=off ↔ 测试 20:36:40 suite=CH395F
dstr=on ↔ 还原宏后 20:36:55 suite=NONE dstr=off(时间戳每次都变 = 头依赖
真的生效)。@test 全闭环 PASS:戳匹配 + 回读 No difference found +
锚点 x1 + 零 [ERR]。run_boot_test.py 无需改动(戳按"标记后连续可打印
ASCII"抠取,天然吃下新后缀)。

代价:Code 196764 → 196788(+24 B),@build 0 错 0 警。

文档:自动化测试流程.md 补「戳覆盖构建配置」小节与变更记录行;失败模式
表新增一行——戳命中但 suite= 与要跑的套件不符 = 烧的是产品镜像。

门禁:mem-numbers 钩子拦下「RAM 文档快照与 .map 不一致」→ 用
check_mem_numbers.py --write 刷新生成区(ER_IROM1 213,256 → 213,396 B)。
2026-10-11 20:45:09 +08:00
..

App/app/ — 应用入口与全局定义

应用层的入口与全局定义:初始化编排、功能编译开关、跨模块的就绪事件定义。

文件一览

文件 作用
app_main.c/h 应用初始化入口 app_main_init:时间子系统优先 → RS485 → NAND → ADC → 诊断(在 osKernelStart 之前执行)
app_cfg.h 功能模块编译开关(裁剪测试套件/模块用)
sys_events.h 系统就绪事件定义(CMSIS-RTOS v2 Event Flags:SYS_EVT_NET_READY / SYS_EVT_STORAGE_READY / SYS_EVT_FTP_READY / SYS_EVT_TIMESYNC_READY 及命令位)

初始化顺序(app_main_init)

sd2506_init            // 时间子系统优先,使后续日志带时间戳
sys_clock_init         // 墙钟(RTC 故障降级并返回 -1 → 触发自检)
rs485_init
gd5f2gq5ue_init
tpafe5160_init
SD2506 诊断            // ID / 时间 / 温度 / 电池
tpafe5160_start_conv_irq  // 首次 ADC 转换

⚠️ 以上全部在内核启动前执行 → 禁止任何 FreeRTOS/CMSIS-RTOS API 调用 (osMessageQueueNew 等会杀死启动)。内核前日志走无锁静态缓冲(见 ../log/)。

相关文档

  • 架构全景:docs/架构设计/项目架构总览.md
  • 启动顺序与就绪屏障:docs/架构设计/项目启动顺序管理.md
  • 墙钟:docs/子系统设计/系统墙钟时间维护说明.md