E-01修复:poll超长守卫前置st.size根治死码,save输出上限收紧4096,写盘闸拦截与自检留痕
This commit is contained in:
+14
-4
@@ -9,6 +9,10 @@
|
||||
* 修改记录:
|
||||
* v1.0 2026-09-14 王建锋 创建初始版本(P3:段键表引擎 + net_cfg 集成)
|
||||
* v1.1 2026-09-15 王建锋 属主任务由 netTask 改为 defaultTask(配置引擎单一属主,P1-3)
|
||||
* v1.2 2026-09-21 王建锋 E-01(错误码传播审计 P0):超长守卫契约同步——poll 沉降
|
||||
* 后先按真实 st.size 判超长(旧实现查截断后读长恒假)、
|
||||
* save 输出上限收紧至 CFG_FILE_MAX_LEN、写盘唯一闸口拒写
|
||||
* 超长;超长处置补自检留痕
|
||||
*/
|
||||
|
||||
#ifndef CFG_FILE_H
|
||||
@@ -22,7 +26,8 @@ extern "C" {
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
/* 配置文件长度上限(字节);超过 = 文件损坏,按出厂模板重建 */
|
||||
/* 配置文件长度上限(字节);超过 = 文件损坏,按出厂模板重建
|
||||
* (load 与 poll 同判,E-01:poll 在读取前基于真实 st.size 判定) */
|
||||
#define CFG_FILE_MAX_LEN 4096u
|
||||
|
||||
/* 引擎可注册段数上限 */
|
||||
@@ -86,6 +91,7 @@ int cfg_file_register(const cfg_section_reg_t *p_reg);
|
||||
* 2. 文件缺失 → 按当前 RAM 副本生成出厂模板写盘(首启建文件)
|
||||
* 3. 文件存在 → 解析:有效键写入 RAM 副本;无效键留工厂默认并留痕
|
||||
* 4. 文件超长(> CFG_FILE_MAX_LEN)= 损坏 → 工厂默认 + 重建模板
|
||||
* + 自检留痕(poll 检出运行期超长文件执行同一契约,E-01)
|
||||
*/
|
||||
int cfg_file_load(void);
|
||||
|
||||
@@ -96,7 +102,9 @@ int cfg_file_load(void);
|
||||
* 限定条件:至少注册一个段
|
||||
* 函数说明:文件存在 → 逐行保留注释/未知段/未知键,受管段/键按 RAM 副本
|
||||
* 值原位改写,缺失段/键补写;文件缺失/损坏 → 按 RAM 副本重建
|
||||
* 完整文档(含文件头注释);写盘 = 临时文件 + 原子改名
|
||||
* 完整文档(含文件头注释);写盘 = 临时文件 + 原子改名;输出超
|
||||
* CFG_FILE_MAX_LEN → 拒绝保存返回 -1(原文件不动 + 自检上报,
|
||||
* 引擎写盘闸口同拒,E-01)
|
||||
*/
|
||||
int cfg_file_save(void);
|
||||
|
||||
@@ -107,8 +115,10 @@ int cfg_file_save(void);
|
||||
* 限定条件:由配置引擎属主任务周期调用(建议 2s;MCU = defaultTask,
|
||||
* 模拟器 = 主循环);引擎静态状态无跨任务保护,属主唯一即无竞态
|
||||
* 函数说明:(size, mtime 变更令牌) 相对基线变化且连续 CFG_FILE_SETTLE_CNT
|
||||
* 次轮询稳定 → 重载全部段(各段复位工厂默认后解析);挂回调段
|
||||
* 有差异 → 调用其回调(如触发网络重建);重载后刷新基线
|
||||
* 次轮询稳定 → 先查 st.size 超 CFG_FILE_MAX_LEN = 损坏 → 工厂默认
|
||||
* + 重建模板 + 自检留痕(不触发段回调:保留在线修复通道,重启
|
||||
* 收敛,E-01);否则重载全部段(各段复位工厂默认后解析);挂回调
|
||||
* 段有差异 → 调用其回调(如触发网络重建);重载后刷新基线
|
||||
* (回调触发的写盘不引发二次重载)
|
||||
*/
|
||||
void cfg_file_poll(void);
|
||||
|
||||
Reference in New Issue
Block a user