411594bf67
卡 1(文档口径;卡 0/12 实测类按用户指示跳过,只落口径与占位): - ADC通道映射说明.md 文首摘要行的 ±10 V 更正为 ±5 V 双极性:板上 RANGE 接 GND,±5 V 满量程 = 10 V 跨度,LSB ≈ 152.59 µV/码(@引脚) - §7 TPAFE 量程行重写并括注 ±10 V 是芯片可选档(RANGE=HIGH,跨度 20 V、 LSB 305.18 µV)、本板未用;§1 缺陷实质 2 补「满量程 = 10 V 跨度」 - 新增 §7.1 端到端量纲链路分段口径:②引脚侧 LSB 系数定死(TPAFE 152.59 / STM32 805.66 µV/码,纯转换器事实、与前端网络无关,卡 2 的 ROM 默认按此 冻结);③1k+1k 网络「2:1 分压 vs 源阻抗匹配」两读法待卡 0 注入斜率判别; ④端子→AINn 变比为仓库缺口待卡 0b;305.18/1611.3 定性为读法 A 的条件值、 判别前禁入代码;§9 变更记录编号不动(继保规划有指向本文件 §9 的跨文档 引用),新增行追加于其后 - 全仓其余 ±10 V 仅剩芯片手册转写与 tpafe5160 RANGE 枚举可选档注释 (芯片能力描述,非本板口径);数据可信.md §2.1 冲突挂账归 lead 销项 卡 3(代码;cfg_file.c 带 BOM,编辑后核 EF BB BF 完好): - 新增值类型 CFG_VAL_INT(枚举尾部追加、既有值不变;len 1/2/4 小端补码): s_decode_int() = strtol + ERANGE + 宽度上下界双校验(两端 long 均 32 位, 超范围文本饱和成 LONG_MAX 仅比界抓不住,ERANGE 必查);s_encode() 带负号 %ld 输出;cfg_file_register() 拒 INT 非法 len - 单测新增 TC-CONFIG-006/007/008:-1 / INT32_MIN / INT32_MAX / 越界拒绝 (含饱和带 2147483648)/ 编码带负号 / [sys] 段 load-save-load 往返一致 / 注册拒绝 INT len=3 —— cfg_file 套件 200/200 PASS - 回归:net_cfg 45/45、ftp_cfg 16/16 PASS,既有 network/ftp 段行为不变 - 越界改动说明:TC-CONFIG-006~008 定义行登记进属主文档 docs/测试说明/配置文件单元测试说明.md(id-check 增量拦截要求在属主登记处 补定义,该文件不在本卡写范围但为门禁唯一修复路径,仅追加 3 行用例 + 1 行 变更记录,lead 评审时留意) gate:@build 0 错误 0 警告(Code=214104 RO=18860 RW=1204 ZI=131852); RAM 增量 0 B(RW/ZI 与 ram_baseline 2026-10-24 行完全一致,IRAM1 57.7%、 CCM 87.9% 不变),Flash +324 B;uvprojx 零挂载变化、未入库。 staged 门禁全绿,唯 mem-numbers / mem-budget 因 Flash 增量需台账回填 (--write 目标 docs/内存管理/** 属单写者文件,本道不得触碰): gate: only mem-budget/mem-numbers pending lead ledger backfill (--all-files 全量自查确认失败面仅此两条;BOM/CR/U+FFFD/字面量 ASCII 已 手工自查)
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 原子写) |
prot_set_store.c/h |
保护定值持久化胶水(B7):/prot_set.bin blob 读写(blob 格式/校验/原子装载在 App/algo/prot_set.c 纯逻辑层);装载 = storage bring-up(屏障前),落盘 = defaultTask 消费 SYS_EVT_PROT_SET_SAVE |
设计要点
- 单任务收敛:
cfg_file为静态态,只有 defaultTask 操作;UI 保存请求经SYS_EVT_CFG_SAVE事件唤醒 defaultTask 执行(netTask/uiTask 不得直接调用); 定值落盘同构——iec104Task 只置事件位(SYS_EVT_PROT_SET_SAVE),不碰文件系统 - 零分配共享核心:核心逻辑不含任何分配符号,动态内存收进平台后端
(
cfg_store_alloc/free:MCU→pvPortMalloc,模拟器→宿主堆) - 原子写:写
/config.TMP后f_rename替换,避免掉电损坏 - 旧档迁移已删除(2026-10-10):旧格式
/cfg/netcfg.bin不再读取——存在则被忽略(不读、 不删、不迁移),配置回落工厂默认;net_cfg_legacy.c/h与cfg_store_legacy_path()已移除 - 自研代码禁用 C 库堆分配:MicroLIB 堆仅 512B(
malloc必返回 NULL)
相关文档
docs/子系统设计/配置文件设计说明.md— 完整设计(分层/解析/持久化)docs/子系统设计/网络配置说明.md— 网络段