Files
STM32F4-Base/App/cfg
wandering1 e0b02d397c 修复 P2 全部 10 项:错误传播/竞态/门控/文档失真
待办池 docs/待处理内容.md §3.2 的 10 个 P2 全部闭环;逐项落代码 + 注释说明。

P2-1  cfg_file: 受管键行超 CFG_LINE_TEST_MAX 拒绝保存(防重复键行)
P2-2  ch395f: DMA 失败传播状态 + 锁存通道故障 + 读不拷不可信数据
P2-7  net_select: LISTENING 不再恒判可读(消除 select 忙轮询地雷)
P2-8  time_sync: 核实 L3 pending 改写已闭环(net_recv_to 分片 + 总预算)
P2-9  sys_log: 挂载改幂等 + 卷锁,defaultTask 2s 重试建 /log
P2-10 sys_log: s_read_raw 纳入卷锁 try(读者/写者 unlink 互斥)
P2-11 net_task: RECONFIG 改 osEventFlagsWait 原子取走 + 清除
P2-12 app_cfg: APP_*_ENABLE 如实标注为未接线占位,删“开关”说法
P2-13 freertos: 产品构建 vTaskDelete(testTask) 回收 8KB CCM 栈
P2-15 download.bat: 先删旧日志 + 增“未产出日志”判定

P2-13 用 USER CODE 区回收而非生成区 #if 门控:生成区改动会被 CubeMX
重生成覆盖,本方案重生成不丢。P2-12 因产品定义 B0 未定、APP_NET_ENABLE
无单一接线点,按修复建议备选(删“开关”说法)处理。

验证:@build 0 错 0 警;主机单测 watchdog 39/39 + sys_clock 100/100 +
cfg_file 149/149(新增 TC-CFG-044);pre-commit --all-files 17/17。
2026-10-04 08:30:30 +08:00
..

App/cfg/ — 配置引擎

/config.ini 配置引擎:分层解析、持久化(原子写)、旧档迁移。 属主 = defaultTask(单任务收敛,静态态);其它任务不得直接触碰。

文件一览

文件 作用
cfg_file.c/h 配置引擎核心:解析 / 查询 / 保存 / 2s 周期 cfg_file_poll
cfg_file_store.h 存储后端抽象接口(MCU=FreeRTOS 堆 / 模拟器=宿主堆,共享核心零分配符号)
cfg_file_store_mcu.c MCU 端后端实现:/config.ini(/config.TMP + f_rename 原子写)

设计要点

  • 单任务收敛:cfg_file 为静态态,只有 defaultTask 操作;UI 保存请求经 SYS_EVT_CFG_SAVE 事件唤醒 defaultTask 执行(netTask/uiTask 不得直接调用)
  • 零分配共享核心:核心逻辑不含任何分配符号,动态内存收进平台后端 (cfg_store_alloc/free:MCU→pvPortMalloc,模拟器→宿主堆)
  • 原子写:写 /config.TMP 后 f_rename 替换,避免掉电损坏
  • 旧档迁移:首启时把旧格式转换为当前格式(net_cfg_legacy.c 负责网络段)
  • 自研代码禁用 C 库堆分配:MicroLIB 堆仅 512B(malloc 必返回 NULL)

相关文档

  • docs/子系统设计/配置文件设计说明.md — 完整设计(分层/解析/持久化/迁移)
  • docs/子系统设计/网络配置说明.md — 网络段
  • docs/待处理内容.md P3-2 — 临时文件名硬编码问题