ad0fd53389
阶段 D(验证与卫生)离线可完成项收口;台架依赖项 D2/D5/D6 保留登记。 - D4 P3 卫生六项: - P3-1 cfg_file.c s_encode:STR 型 len==0 回绕(p_key->len - 1u)直接拒绝 - P3-2 cfg_file_store_mcu.c:原子写临时名由 p_path 同目录推导(s_build_tmp_path) - P3-4 rs485.c:模块描述订正为实际实现(HAL_Delay(1),非 DWT µs) - P3-6 ch395f_get_socket_status:补 p_status NULL 检查 - P3-8 build.md:退出码契约订正为 0/1/2 三档 - P3-11 adc_task/rs485_task:注明"预留桩(未启用)" - D3 S-2:新增 docs/测试说明/boot_log_data/(快照存档目录 + 流程), 并在 测试开发标准流程.md §7.3 登记沉淀约定 - 登记簿销项:删 P3-1/2/4/6/8/11、S-2;阶段 D 表移除 D3/D4; §1 计数更新(P3 6→0、登记簿 10→9);§3 章节重排 (登记簿→§3.2、专项→§3.3);清理 App/cfg/README.md 等对已销编号的引用 - 同步刷新内存快照:Flash 266,632 B / ROM 合计 267,372 B 验证:@build 0 错 0 警;cfg_file 主机单测 149/149; pre-commit --all-files 17/17 通过。
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(临时名由目标路径同目录推导 + 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— 网络段