# 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 — 临时文件名硬编码问题