refactor(编号): 16 个测试模块码单词化 + 门禁识别面连带放宽

批 2(用户授权改名 + 「新名要一眼看懂」裁定)
- 16 个有歧义模块码单词化,共 1,146 处随 scripts/rename_ids.py 改写:
  AI→ADCIN、AH→ADCHEALTH、PS→PROTSET、PE→PROTELEM、PH→PHASOR、
  TS→TIMESYNC、VL→VOLLOCK、NP→NANDPORT、CFG→CONFIG、CLK→SYSCLK、
  WD→WATCHDOG、STO→STORAGE、SH→SHA256、FA→FTPAUTH、FR→FREQ、104→IEC104
- 不动 NET/GD5F/RTC/SOE/UI/ADC/LOG/RS485/TOOL(已是单词、芯片名或业界通用词,
  改了纯属 churn)
- 别名按全局登记:这批字面量已完全限定(TC-<码>-<nnn>),不存在裸形多义
- 映射表存档 scripts/rename_maps/batch2.json 作审计轨迹;§6 模块码表同步

连带修门禁(关键教训)
- 模块码涨到 9 位(ADCHEALTH/WATCHDOG)后,候选正则与族正则的 {0,4} 上界
  会让改名后的号**整批从门禁眼里消失**:实测编号字面量从 8271 掉到 7315、
  悬空假降 490 处。已放宽到 {0,9} 并写进 §6 注记
- 结论:改名批次必须连带复核识别面,只改数据不改判据 = 静默放行;
  这次是靠「可判定比例跌破基线即失败」那条线拦下来的

现状与遗留
- 校验 1 未登记前缀 0 处;可判定比例 82.71%(基线 82.6%,只涨不跌成立)
- 遗留:7 个模块的「单元测试说明.md」仍缺(PROTSET 116、NANDPORT 109、
  PROTELEM 65、FREQ 48、FTPAUTH 45、SHA256 25、SOE 14 处悬空)——改名不解决
  缺文档,处置方式待议
- 遗留:T-2/T-3/T-4/T-6 历史任务号悬空(别名表未收全,属本工具批次漏项)
- 未改任何 C/H 可编译语义(仅注释与宏名内的编号),故不需 @build
This commit is contained in:
2026-10-21 09:53:28 +08:00
parent 301c3e5183
commit bda7ab2b50
45 changed files with 3706 additions and 1295 deletions
+1 -1
View File
@@ -31,7 +31,7 @@ extern storage_test_stats_t g_storage_stats;
void storage_test_run(void);
/* 存储套件恢复测试(默认关闭):取消注释并编译 STORAGE 套件运行一次,
* 即可重建 BBT(清除 TC-STO-03 等注入的坏块)并重新格式化,恢复设备干净态。
* 即可重建 BBT(清除 TC-STORAGE-03 等注入的坏块)并重新格式化,恢复设备干净态。
* 恢复完成后建议重新注释并编译正常构建。 */
//#define ENABLE_STORAGE_RECOVERY_TESTS /* 台架已跑过一次恢复(2026-09-20 BBT 回出厂态),保持注释 */
+50 -50
View File
@@ -32,7 +32,7 @@ static FIL fil;
* L6406E 实测;2048 分块仍覆盖整页写路径,128KB 总量不变) */
static uint8_t s_perf_buf[2048];
/* TC-STO-01: FTL 掉电恢复(journal 持久化)
/* TC-STORAGE-01: FTL 掉电恢复(journal 持久化)
* 写文件并同步落盘,随后模拟掉电(卸载 + 复位 FTL + 重新 resume),再挂载校验内容一致。
*/
static void storage_test_powerloss(void)
@@ -44,10 +44,10 @@ static void storage_test_powerloss(void)
uint32_t i;
int ok = 0;
DBG_INFO("=== Storage Test: TC-STO-01 Power-loss recovery ===");
DBG_INFO("=== Storage Test: TC-STORAGE-01 Power-loss recovery ===");
if (f_mount(&fs, "", 1) != FR_OK) {
STORAGE_TEST_CHECK(0, "TC-STO-01 mount");
STORAGE_TEST_CHECK(0, "TC-STORAGE-01 mount");
return;
}
@@ -62,7 +62,7 @@ static void storage_test_powerloss(void)
f_sync(&fil);
f_close(&fil);
} else {
STORAGE_TEST_CHECK(0, "TC-STO-01 f_open(write)");
STORAGE_TEST_CHECK(0, "TC-STORAGE-01 f_open(write)");
return;
}
@@ -72,7 +72,7 @@ static void storage_test_powerloss(void)
nand_ftl_init();
if (f_mount(&fs, "", 1) != FR_OK) {
STORAGE_TEST_CHECK(0, "TC-STO-01 remount after resume");
STORAGE_TEST_CHECK(0, "TC-STORAGE-01 remount after resume");
return;
}
@@ -93,11 +93,11 @@ static void storage_test_powerloss(void)
} else {
ok = 0;
}
STORAGE_TEST_CHECK(ok, "TC-STO-01 content survived power-loss (resume)");
STORAGE_TEST_CHECK(ok, "TC-STORAGE-01 content survived power-loss (resume)");
f_unlink("pl.dat");
}
/* TC-STO-02: 大文件 / 多扇区 / 随机 seek
/* TC-STORAGE-02: 大文件 / 多扇区 / 随机 seek
* 写 256KB 位置相关模式文件,顺序读回比对 + 随机偏移 seek 读比对。
* 栈预算:testTask 栈 4KB,局部缓冲 4096 必然溢出栈(8 月侥幸未爆是堆使用
* 低),改 2048 = 恰好一个 NAND 整页,覆盖度等价。
@@ -111,16 +111,16 @@ static void storage_test_largefile(void)
uint32_t off, i;
int ok = 1;
DBG_INFO("=== Storage Test: TC-STO-02 Large file / random seek ===");
DBG_INFO("=== Storage Test: TC-STORAGE-02 Large file / random seek ===");
if (f_mount(&fs, "", 1) != FR_OK) {
STORAGE_TEST_CHECK(0, "TC-STO-02 mount");
STORAGE_TEST_CHECK(0, "TC-STORAGE-02 mount");
return;
}
/* 写:位置相关模式 */
if (f_open(&fil, "big.dat", FA_CREATE_ALWAYS | FA_WRITE) != FR_OK) {
STORAGE_TEST_CHECK(0, "TC-STO-02 f_open(write)");
STORAGE_TEST_CHECK(0, "TC-STORAGE-02 f_open(write)");
return;
}
for (off = 0; off < total; off += chunk) {
@@ -133,7 +133,7 @@ static void storage_test_largefile(void)
/* 顺序读回 */
if (f_open(&fil, "big.dat", FA_READ) != FR_OK) {
STORAGE_TEST_CHECK(0, "TC-STO-02 f_open(read)");
STORAGE_TEST_CHECK(0, "TC-STORAGE-02 f_open(read)");
return;
}
for (off = 0; off < total; off += chunk) {
@@ -144,7 +144,7 @@ static void storage_test_largefile(void)
}
if (!ok) break;
}
STORAGE_TEST_CHECK(ok, "TC-STO-02 sequential 256KB read consistent");
STORAGE_TEST_CHECK(ok, "TC-STORAGE-02 sequential 256KB read consistent");
/* 随机 seek 读 */
if (ok) {
@@ -160,13 +160,13 @@ static void storage_test_largefile(void)
}
if (!seek_ok) break;
}
STORAGE_TEST_CHECK(seek_ok, "TC-STO-02 random seek read consistent");
STORAGE_TEST_CHECK(seek_ok, "TC-STORAGE-02 random seek read consistent");
}
f_close(&fil);
f_unlink("big.dat");
}
/* TC-STO-03: 坏块注入下存储写入
/* TC-STORAGE-03: 坏块注入下存储写入
* 清空旧 map → 注入若干好块为坏(持久化) → 重建文件系统 → 正常写读 → 校验坏块仍被报告。
*/
static void storage_test_badblock(void)
@@ -177,7 +177,7 @@ static void storage_test_badblock(void)
int nbad = 0;
int ok = 1;
DBG_INFO("=== Storage Test: TC-STO-03 Bad-block injection during storage ===");
DBG_INFO("=== Storage Test: TC-STORAGE-03 Bad-block injection during storage ===");
/* 清空旧 dhara map,避免后续注入的坏块被旧映射引用 */
nand_ftl_format();
@@ -190,10 +190,10 @@ static void storage_test_badblock(void)
}
}
if (nbad < 3) {
STORAGE_TEST_CHECK(0, "TC-STO-03 could not find 3 good blocks (got %d)", nbad);
STORAGE_TEST_CHECK(0, "TC-STORAGE-03 could not find 3 good blocks (got %d)", nbad);
return;
}
STORAGE_TEST_CHECK(nbad == 3, "TC-STO-03 injected %d bad blocks", nbad);
STORAGE_TEST_CHECK(nbad == 3, "TC-STORAGE-03 injected %d bad blocks", nbad);
/* 复位 FTL 使 dhara 经 is_block_bad 看到新坏块 */
f_mount(&fs, "", 0);
@@ -205,12 +205,12 @@ static void storage_test_badblock(void)
MKFS_PARM opts = { FM_FAT32, 0, 0, 0, 0 };
uint8_t work[FF_MAX_SS];
if (f_mkfs("", &opts, work, sizeof(work)) != FR_OK) {
STORAGE_TEST_CHECK(0, "TC-STO-03 f_mkfs");
STORAGE_TEST_CHECK(0, "TC-STORAGE-03 f_mkfs");
return;
}
}
if (f_mount(&fs, "", 1) != FR_OK) {
STORAGE_TEST_CHECK(0, "TC-STO-03 mount");
STORAGE_TEST_CHECK(0, "TC-STORAGE-03 mount");
return;
}
@@ -222,7 +222,7 @@ static void storage_test_badblock(void)
f_write(&fil, wbuf, sizeof(wbuf), &bw);
f_close(&fil);
} else {
STORAGE_TEST_CHECK(0, "TC-STO-03 f_open(write)");
STORAGE_TEST_CHECK(0, "TC-STORAGE-03 f_open(write)");
return;
}
@@ -239,24 +239,24 @@ static void storage_test_badblock(void)
} else {
ok = 0;
}
STORAGE_TEST_CHECK(ok, "TC-STO-03 file intact with injected bad blocks");
STORAGE_TEST_CHECK(ok, "TC-STORAGE-03 file intact with injected bad blocks");
/* 校验注入坏块仍被报告为坏(未被 dhara 占用) */
int badok = 1;
for (int k = 0; k < nbad; k++) {
if (gd5f2gq5ue_is_block_bad(bad[k]) != 1) { badok = 0; }
}
STORAGE_TEST_CHECK(badok, "TC-STO-03 injected blocks still reported bad");
STORAGE_TEST_CHECK(badok, "TC-STORAGE-03 injected blocks still reported bad");
f_unlink("bbt.dat");
/* 注意:注入的坏块已持久化,测试设备专用;如需恢复需重建 BBT / 重新格式化
* (配套 TC-STO-04 恢复测试:storage_test.h 启用 ENABLE_STORAGE_RECOVERY_TESTS
* (配套 TC-STORAGE-04 恢复测试:storage_test.h 启用 ENABLE_STORAGE_RECOVERY_TESTS
* 后跑一次套件,即可清除运行时注入坏块 + 清 dhara map 回出厂态) */
}
#endif /* ENABLE_DESTRUCTIVE_TESTS: s_perf_buf + TC-STO-01/02/03(写、擦、坏块注入) */
#endif /* ENABLE_DESTRUCTIVE_TESTS: s_perf_buf + TC-STORAGE-01/02/03(写、擦、坏块注入) */
/* TC-STO-05: 文件名/路径合法性校验(守护 ".fschk 无限重格式化" 真根因)
/* TC-STORAGE-05: 文件名/路径合法性校验(守护 ".fschk 无限重格式化" 真根因)
* 本移植 FF_USE_LFN=0,只支持严格 8.3 短名(主名≤8、扩展≤3、不以点开头)。
* 非法名字 f_open 必返 FR_INVALID_NAME(纯 RAM 名字判定、不碰盘);合法但
* 不存在的名字返 FR_NO_FILE。本测试断言两类严格可区分——一旦哪天有人把
@@ -293,10 +293,10 @@ static void storage_test_name_validation(void)
"pipe|name" /* | */
};
DBG_INFO("=== Storage Test: TC-STO-05 Filename validation ===");
DBG_INFO("=== Storage Test: TC-STORAGE-05 Filename validation ===");
if (f_mount(&fs, "", 1) != FR_OK) {
STORAGE_TEST_CHECK(0, "TC-STO-05 mount");
STORAGE_TEST_CHECK(0, "TC-STORAGE-05 mount");
return;
}
@@ -310,7 +310,7 @@ static void storage_test_name_validation(void)
DBG_ERROR(" valid name wrongly rejected: '%s'", good[i]);
}
}
STORAGE_TEST_CHECK(gok, "TC-STO-05 valid 8.3 names accepted");
STORAGE_TEST_CHECK(gok, "TC-STORAGE-05 valid 8.3 names accepted");
for (i = 0; i < (uint32_t)(sizeof(bad) / sizeof(bad[0])); i++) {
FRESULT r = f_open(&fil, bad[i], FA_READ);
@@ -325,11 +325,11 @@ static void storage_test_name_validation(void)
DBG_ERROR(" invalid name NOT rejected: '%s' -> fr=%d", bad[i], (int)r);
}
}
STORAGE_TEST_CHECK(bok, "TC-STO-05 invalid names rejected (FR_INVALID_NAME)");
STORAGE_TEST_CHECK(bok, "TC-STORAGE-05 invalid names rejected (FR_INVALID_NAME)");
}
#ifdef ENABLE_DESTRUCTIVE_TESTS
/* TC-STO-06: 打开模式与写回字节数语义(守护 FA_OPEN_APPEND / 短写陷阱)
/* TC-STORAGE-06: 打开模式与写回字节数语义(守护 FA_OPEN_APPEND / 短写陷阱)
* 本移植 FA_OPEN_APPEND 不含 FA_WRITE → 不带写位打开 f_write 必返 FR_DENIED;
* 追加写必须 FA_WRITE|FA_OPEN_APPEND。另 f_write 簇耗尽返 FR_OK+短写(无错误
* 码),判成败必须校验写回字节数。锁定这两条移植专有语义防回归。
@@ -339,17 +339,17 @@ static void storage_test_open_modes(void)
UINT bw;
FRESULT r;
DBG_INFO("=== Storage Test: TC-STO-06 Open-mode semantics ===");
DBG_INFO("=== Storage Test: TC-STORAGE-06 Open-mode semantics ===");
if (f_mount(&fs, "", 1) != FR_OK) {
STORAGE_TEST_CHECK(0, "TC-STO-06 mount");
STORAGE_TEST_CHECK(0, "TC-STORAGE-06 mount");
return;
}
(void)f_unlink("mode.tmp");
/* 1) 建一个含初始内容的文件 */
r = f_open(&fil, "mode.tmp", FA_CREATE_ALWAYS | FA_WRITE);
STORAGE_TEST_CHECK(r == FR_OK, "TC-STO-06 create base file");
STORAGE_TEST_CHECK(r == FR_OK, "TC-STORAGE-06 create base file");
if (r == FR_OK) {
f_write(&fil, "abc", 3, &bw);
f_close(&fil);
@@ -357,36 +357,36 @@ static void storage_test_open_modes(void)
/* 2) FA_OPEN_APPEND(无 FA_WRITE)→ 写必返 FR_DENIED */
r = f_open(&fil, "mode.tmp", FA_OPEN_APPEND);
STORAGE_TEST_CHECK(r == FR_OK, "TC-STO-06 open append(no write)");
STORAGE_TEST_CHECK(r == FR_OK, "TC-STORAGE-06 open append(no write)");
if (r == FR_OK) {
FRESULT wr = f_write(&fil, "xyz", 3, &bw);
STORAGE_TEST_CHECK(wr == FR_DENIED,
"TC-STO-06 append-no-write must DENY (fr=%d)", (int)wr);
"TC-STORAGE-06 append-no-write must DENY (fr=%d)", (int)wr);
f_close(&fil);
}
/* 3) FA_WRITE|FA_OPEN_APPEND → 追加成功且字节数正确 */
r = f_open(&fil, "mode.tmp", FA_WRITE | FA_OPEN_APPEND);
STORAGE_TEST_CHECK(r == FR_OK, "TC-STO-06 open write|append");
STORAGE_TEST_CHECK(r == FR_OK, "TC-STORAGE-06 open write|append");
if (r == FR_OK) {
(void)f_write(&fil, "xyz", 3, &bw);
STORAGE_TEST_CHECK(bw == 3, "TC-STO-06 append byte-count (%u)", bw);
STORAGE_TEST_CHECK(bw == 3, "TC-STORAGE-06 append byte-count (%u)", bw);
f_close(&fil);
}
/* 4) 只读打开后写 → 必返 FR_DENIED(读句柄不可写) */
r = f_open(&fil, "mode.tmp", FA_READ);
STORAGE_TEST_CHECK(r == FR_OK, "TC-STO-06 open read-only");
STORAGE_TEST_CHECK(r == FR_OK, "TC-STORAGE-06 open read-only");
if (r == FR_OK) {
FRESULT wr = f_write(&fil, "q", 1, &bw);
STORAGE_TEST_CHECK(wr == FR_DENIED,
"TC-STO-06 read-only write must DENY (fr=%d)", (int)wr);
"TC-STORAGE-06 read-only write must DENY (fr=%d)", (int)wr);
f_close(&fil);
}
(void)f_unlink("mode.tmp");
}
#endif /* ENABLE_DESTRUCTIVE_TESTS: TC-STO-06 */
#endif /* ENABLE_DESTRUCTIVE_TESTS: TC-STORAGE-06 */
#endif /* !ENABLE_STORAGE_RECOVERY_TESTS: 共享缓冲 + 正常测试函数 */
#ifdef ENABLE_STORAGE_RECOVERY_TESTS
@@ -506,7 +506,7 @@ static void storage_test_run_normal(void)
}
#endif /* ENABLE_DESTRUCTIVE_TESTS: 文件系统写读 + 性能压测 */
/* ==================== 存储集成测试(TC-STO-05 契约 + 01~03 集成) ========== */
/* ==================== 存储集成测试(TC-STORAGE-05 契约 + 01~03 集成) ========== */
/* 纯语义契约测试(非破坏性):文件名合法性 */
storage_test_name_validation();
@@ -581,42 +581,42 @@ static void storage_test_wipe_visible(void)
DBG_INFO(" wiped %lu blocks (%lu skipped as bad, %lu visible)",
(unsigned long)done, (unsigned long)skipped, (unsigned long)usable);
STORAGE_TEST_CHECK(done > 0U, "TC-STO-04 full wipe (%lu blocks erased)",
STORAGE_TEST_CHECK(done > 0U, "TC-STORAGE-04 full wipe (%lu blocks erased)",
(unsigned long)done);
}
#endif /* STORAGE_RECOVERY_FULL_WIPE */
/* TC-STO-04: 维护模式(恢复 = 重建 BBT + 重新格式化;叠加全片擦除 = 容量恢复)
/* TC-STORAGE-04: 维护模式(恢复 = 重建 BBT + 重新格式化;叠加全片擦除 = 容量恢复)
* 仅在启用 ENABLE_STORAGE_RECOVERY_TESTS 时编译运行;运行一次即可把设备
* 恢复到干净出厂态(清除运行时注入坏块并清空 dhara map)。
*/
static void storage_test_recover(void)
{
DBG_INFO("=== Storage Test: TC-STO-04 maintenance (recovery / full wipe) ===");
DBG_INFO("=== Storage Test: TC-STORAGE-04 maintenance (recovery / full wipe) ===");
int r = gd5f2gq5ue_bbt_rebuild();
STORAGE_TEST_CHECK(r == GD5F_OK, "TC-STO-04 bbt rebuild");
STORAGE_TEST_CHECK(r == GD5F_OK, "TC-STORAGE-04 bbt rebuild");
#ifdef STORAGE_RECOVERY_FULL_WIPE
storage_test_wipe_visible();
#else
nand_ftl_format();
STORAGE_TEST_CHECK(1, "TC-STO-04 nand_ftl_format done");
STORAGE_TEST_CHECK(1, "TC-STORAGE-04 nand_ftl_format done");
#endif
uint8_t fb[GD5F_TOTAL_BLOCKS / 8];
uint32_t ver = 0;
if (gd5f_bbt_dump_flash(fb, &ver) == GD5F_OK) {
STORAGE_TEST_CHECK(ver >= 1, "TC-STO-04 persisted BBT version=%lu", ver);
STORAGE_TEST_CHECK(ver >= 1, "TC-STORAGE-04 persisted BBT version=%lu", ver);
} else {
STORAGE_TEST_CHECK(0, "TC-STO-04 dump_flash failed");
STORAGE_TEST_CHECK(0, "TC-STORAGE-04 dump_flash failed");
}
#ifdef STORAGE_RECOVERY_FULL_WIPE
DBG_INFO("TC-STO-04 full wipe complete; power-cycle to rebuild fresh "
DBG_INFO("TC-STORAGE-04 full wipe complete; power-cycle to rebuild fresh "
"(capacity expected back to full)");
#else
DBG_INFO("TC-STO-04 recovery complete; recommend power-cycle to re-init cleanly");
DBG_INFO("TC-STORAGE-04 recovery complete; recommend power-cycle to re-init cleanly");
#endif
}
#endif
+1 -1
View File
@@ -34,7 +34,7 @@ extern "C" {
/* === 破坏性测试总开关(默认关闭)===
* 破坏性用例会改变设备的**持久状态**,跑一次即有代价(2026-09-21 实测:GD5F 整轮
* 破坏性用例跑一次即消耗一个 NAND 块,容量 95248 → 95200,且 TC-STO-04 恢复不回来):
* 破坏性用例跑一次即消耗一个 NAND 块,容量 95248 → 95200,且 TC-STORAGE-04 恢复不回来):
* - 向 BBT 持久化坏块标记 / 注入坏块(永久减少可用容量)
* - 写、擦 NAND 块(覆盖卷数据);格式化卷(nand_ftl_format / f_mkfs)
* - FatFS 建文件、写文件、性能压测