修复 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。
This commit is contained in:
@@ -46,12 +46,14 @@ extern "C" {
|
||||
#error "测试套件互斥:一次构建只能启用一个 TEST_SUITE_*"
|
||||
#endif
|
||||
|
||||
/* 派生标记:当前**仅作语义标记,全仓无任何代码引用**(2026-10-03 实机核实:
|
||||
* grep 全仓仅本文件有定义,无使用点)。testTask 的创建与调度见 Src/freertos.c
|
||||
* (无条件创建 testTask)+ test/board/test_config.c 的 start_test_task(),后者**直接
|
||||
* 按 TEST_SUITE_RTC 等宏分支**,与本标记无关——故"RTC 构建下 testTask 不被创建"
|
||||
* 的旧疑点不成立(实测 RTC 套件正常执行)。
|
||||
* 4 个套件(含 RTC)在此补齐:若将来真引入"测试构建下 defaultTask 空闲"等分支而复用
|
||||
/* 派生标记:任一套件被选中时置位。**2026-10-04 起有唯一消费点**——`Src/freertos.c`
|
||||
* 的 MX_FREERTOS_Init() 用它门控 testTask 的回收(P2-13):产品构建下 CubeMX 生成区
|
||||
* 无条件创建 testTask,随后本标记未定义 → 立即 vTaskDelete 回收其 8KB CCM 栈 + TCB,
|
||||
* 避免空转占堆。testTask 的调度见 test/board/test_config.c 的 start_test_task(),
|
||||
* 后者**直接按 TEST_SUITE_RTC 等宏分支**,与本标记无关——故"RTC 构建下 testTask 不被
|
||||
* 创建"的旧疑点不成立(实测 RTC 套件正常执行;RTC 已计入下方析取,故 RTC 构建下本
|
||||
* 标记亦置位、testTask 正常保留)。
|
||||
* 4 个套件(含 RTC)在此补齐:若将来再引入"测试构建下 defaultTask 空闲"等分支而复用
|
||||
* 本标记,可避免重演"漏 RTC"的隐患。详见 docs/测试说明/实机测试实施指南.md §8.3。 */
|
||||
#if defined(TEST_SUITE_CH395F) || defined(TEST_SUITE_STORAGE) || defined(TEST_SUITE_GD5F) || defined(TEST_SUITE_RTC)
|
||||
#define TEST_SUITE_SELECTED
|
||||
|
||||
@@ -44,6 +44,8 @@
|
||||
* TC-CFG-041 外科手术:保留注释/未知段/未知键,受管键原位改写
|
||||
* TC-CFG-042 缺失受管段/键补写
|
||||
* TC-CFG-043 输出超长 -> 拒绝保存(-1) 且原文件不动
|
||||
* TC-CFG-044 受管键行超 CFG_LINE_TEST_MAX -> 拒绝保存(-1) 原文件不动(P2-1);
|
||||
* 非受管键的超长行照旧放过(原样保留)
|
||||
* —— poll 契约(cfg_file_poll)——
|
||||
* TC-CFG-050 首轮建立基线(不重载)
|
||||
* TC-CFG-051 沉降去抖:连续 2 次稳定才重载
|
||||
@@ -698,6 +700,52 @@ static void tc_save(void) {
|
||||
CHECK(s_syslog_count >= 1, "overflow self-test logged");
|
||||
}
|
||||
}
|
||||
|
||||
printf("[TC-CFG-044] over-long managed key line -> reject (P2-1)\n");
|
||||
{
|
||||
char buf[512];
|
||||
size_t n;
|
||||
size_t i;
|
||||
size_t before;
|
||||
int r;
|
||||
|
||||
/* 构造受管键 u8 的超长行(行总长 > CFG_LINE_TEST_MAX):值为 200 位数字。
|
||||
* 修复前:Pass1 静默跳过该行 → Pass2 在段头补写新 KV + 原文超长行原样保留
|
||||
* → 同一键两行。修复后:显式拒绝保存,原文件不动。 */
|
||||
vfs_reset();
|
||||
register_std();
|
||||
n = (size_t)snprintf(buf, sizeof(buf), "[net]\r\nu8 = ");
|
||||
for (i = 0u; i < 200u && n < sizeof(buf) - 3u; i++) {
|
||||
buf[n++] = '9';
|
||||
}
|
||||
buf[n++] = '\r';
|
||||
buf[n++] = '\n';
|
||||
buf[n] = '\0';
|
||||
vfs_put(buf);
|
||||
s_net_data.u8 = 7u;
|
||||
s_syslog_count = 0;
|
||||
before = s_vfs_len;
|
||||
r = cfg_file_save();
|
||||
CHECK(r == -1, "over-long managed key line rejected (-1)");
|
||||
CHECK(s_vfs_len == before, "original file untouched on over-long line");
|
||||
CHECK(s_syslog_count >= 1, "line-too-long self-test logged");
|
||||
|
||||
/* 反向:**非受管键**的超长行不属本守卫范围,应照旧原样保留、保存成功 */
|
||||
vfs_reset();
|
||||
register_std();
|
||||
n = (size_t)snprintf(buf, sizeof(buf), "[net]\r\nu8=1\r\nvendor = ");
|
||||
for (i = 0u; i < 200u && n < sizeof(buf) - 3u; i++) {
|
||||
buf[n++] = 'k';
|
||||
}
|
||||
buf[n++] = '\r';
|
||||
buf[n++] = '\n';
|
||||
buf[n] = '\0';
|
||||
vfs_put(buf);
|
||||
s_net_data.u8 = 9u;
|
||||
CHECK(cfg_file_save() == 0, "over-long unknown key line tolerated");
|
||||
CHECK(strstr(vfs_get(), "u8=9") != NULL, "managed key still rewritten");
|
||||
CHECK(strstr(vfs_get(), "vendor = kkk") != NULL, "unknown long line preserved");
|
||||
}
|
||||
}
|
||||
|
||||
/* TC-CFG-050~054:poll 契约 */
|
||||
|
||||
Reference in New Issue
Block a user