test(P1-10): CH395F 套件三档构建实测 + 修阶段开关行尾跨行注释的切换陷阱

P1-10 剩余①「CH395F 套件实际构建确认链接通过」今天才真正有数:产品基线 + 三档
测试配置(ARMCC,全部 0 错误 0 警告;.sct 保持 128 KB 未动,符合 P1-10 写的
"不建议扩到 192KB"):

  配置(TEST_SUITE_CH395F + 阶段)    Code      ZI      RW_IRAM1      距 92% 余量
  产品基线(阶段全关)                214,104   131,852   75,632 57.7%   44,954 B
  默认阶段 11/14(只切套件宏)        217,468   134,076   77,920 59.5%   42,666 B
  NET 层全开 6~11/13/14              218,992   141,688   85,552 65.3%   35,034 B
  HW  层全开 1~5/12/15(最坏态)      229,256   147,176   90,952 69.4%   29,634 B
  HW  层无需 PC 1/12/15(冒烟用)     215,244   134,896   78,672 60.0%   41,914 B

P1-10  specifically 关心的 PHASE5 三块静态缓冲(3 x PHASE5_CHUNK_SIZE = 3 x 4093)
确实进了链接,不是"理论上会在":hw_full 的 ch395f_test_task.o 数据段 = 12,285 B
(12,279 + 该 TU 其余 6 B)。于是"理论余量足够但未实测"改成了实测:最坏态仍余
29,634 B(RW_IRAM1 上限 131,072 B,92% 线 120,586 B)。RW_CCM 四档恒为 57,376 B /
87.9%——测试代码不进 CCM,但该区已经贴着红线,将来往 CCM 加东西要单独核算。

顺手修掉一个把实测挡了三年的坑(就是它让第一轮 hw 配置炸掉的):
ENABLE_PHASE11/14 两行的说明是**挂在行尾的跨行块注释**。而"关掉一个阶段"的标准动
作是在行首加 //,// 只注释到行尾 → 块注释从第二行起变成裸代码,实测 188 条
error #7: unrecognized token,报点落在注释续行上,看着像头文件坏了、其实只是注释
被腰斩。run_all_suites.py 的 _rewrite_config 只改 TEST_SUITE_* 行(那些行没有行尾
跨行注释)所以一直没暴露;ch395f_test.h 恰是"人手工切阶段"的入口,必须自身安全。
修法:把两段说明挪到 #define 行的上一段,行尾只留同行闭合的短注释;并在开关区后面
写清"开关行注释规范"+ 上面这张实测表(同一事实只在这一处,销项时文档引它)。

验证(_wt/P1-10-test-fw,每步都实跑 @build):
- V1 产品态(改注释后):0/0,Code/RO/RW/ZI = 214104/20388/1204/131852,与主干
  2026-10-25 台账行逐项相同 → 本改动零体积增量。
- V2 只切套件宏(默认阶段 11/14):0/0,RW_IRAM1 77,920 B / 59.5%。
- V3 **朴素行注释切换**(正是炸掉第一轮的那个动作)改到 HW 1/12/15:0/0,且尺寸与
  用 #undef/#define 覆盖法得到的 hw_nopc 逐字节相同(215244/23656/1200/134896)
  → 陷阱确认已消除,两条改法等价。
- V4 还原后产品重建:0/0,数字回到基线;test_config.h 与 ch395f_test.h 均按字节还原
  (git status 只剩本文件这一处改动,测试宏没有留在树里,test-suite-switch 无需放行)。
- 产物身份戳实测:hw_nopc = "Oct 25 2026 04:32:16 suite=CH395F dstr=off"、产品态 =
  "Oct 25 2026 04:32:25 suite=NONE dstr=off" → dstr=off 三档一致,破坏性开关全程关。

RAM 增量:0 B。gate:改动只命中 no-mojibake / trailing-whitespace / end-of-file-fixer /
check-added-large-files / id-check / mem-budget,全部 0;未用 --no-verify。

P1-10 剩余②(@test 烧录抓日志)需要 bench 锁,已把镜像与锚点清单交给 lead 执行;
真机跑 Phase 2~5 / 8 / 11 / 13 / 14 需 PC 端 tcp_server / peer 配合(Phase 11 还要
制造死对端,E11),属"实际测量采样"类,按用户指示本轮跳过,不在本提交声称做过。
This commit is contained in:
2026-10-25 04:49:19 +08:00
parent 7c4628b043
commit 16917bf165
+32 -6
View File
@@ -62,18 +62,44 @@ extern "C" {
//#define ENABLE_PHASE8_TESTS /* [网] 大文件传输(100KB 文件收发) */
//#define ENABLE_PHASE9_TESTS /* [网] Select/Poll I/O 多路复用 */
//#define ENABLE_PHASE10_TESTS /* [网] 边界条件测试 */
#define ENABLE_PHASE11_TESTS /* [网] KeepAlive 超时断开:PC 连 8080 后须制造
* 死对端(禁用网卡;防火墙规则对已建立连接无效,
* E11 实证);勿与 Phase 6/9/10/13 混选(recv 互抢数据) */
/* [网] KeepAlive 超时断开:PC 连 8080 后须制造死对端(禁用网卡;防火墙规则对已建立
* 连接无效,E11 实证);勿与 Phase 6/9/10/13 混选(recv 互抢数据)。
* ⚠ 说明写在**上一行**而不是挂在 #define 行尾:见本节末尾的"开关行注释规范" */
#define ENABLE_PHASE11_TESTS /* [网] KeepAlive 超时断开(判据见 CH395F_Test_Guide) */
/* ---- 链路时延基线(M1;分段/阈值见 docs/测试说明/链路延迟测试说明.md)---- */
//#define ENABLE_PHASE12_TESTS /* [硬] SPI 字节命令 / DMA 时延基线(L1/L2,无需 PC)—— M1 已完成,基线见说明文档 §6.1 */
//#define ENABLE_PHASE15_TESTS /* [硬] 自愈驱动原语:状态回读一致性/cmd_done/sock_reset 状态机跑通/链路缓存(无需 PC)——TC 详见 docs/测试说明/CH395F_Test_Guide.md 阶段 15;台架 20/20 PASS */
/* ---- 链路时延(M2/M3;分段/阈值见 docs/测试说明/链路延迟测试说明.md)---- */
//#define ENABLE_PHASE13_TESTS /* [网] 芯片 + 队列时延(L3~L7/L10,需 PC peer)—— M2 已完成,基线见说明文档 §6.2 */
#define ENABLE_PHASE14_TESTS /* [网] 生产路径时延(L8~L11 + 模拟器 Δ)—— M3,需 peer --mode remo(:7003);
* 与 Phase 11 共存安全:peer 缺席时有 LAT_P14_TIMEOUT_MS 整体超时
* 自动 done,不永久挡 accept */
/* [网] 生产路径时延(L8~L11 + 模拟器 Δ)—— M3,需 peer --mode remo(:7003);
* 与 Phase 11 共存安全:peer 缺席时有 LAT_P14_TIMEOUT_MS 整体超时,自动 done,
* 不永久挡 accept */
#define ENABLE_PHASE14_TESTS /* [网] 生产路径时延(L8~L11) */
/*
* 开关行注释规范(2026-10-25 构建矩阵实测踩出来的,别改回去):
* 每个 ENABLE_PHASE*_TESTS 行只许带"同一行内闭合"的行尾注释,或不写注释;
* 需要多行说明就挪到该行的**上一段**。原因:关一个阶段的动作是在行首加两个
* 斜杠,而它只注释到行尾——挂在行尾的跨行注释会从第二行起**变成裸代码**(实测
* 188 条 error #7: unrecognized token,报点落在注释的续行上,看着像头文件坏了,
* 其实只是注释被腰斩)。开阶段是同一个坑的反面:去掉行首斜杠并不会把注释拼回来。
* test/run_all_suites.py 的 _rewrite_config 只改 TEST_SUITE_* 行(那些行没有行尾
* 跨行注释)所以一直没炸;本文件是"人手工切阶段"的入口,必须自身安全。
*
* 链接余量构建实测(条目属主 docs/任务规划/测试与架构专项.md P1-10;2026-10-25,
* RW_IRAM1 = 128 KB 的 .sct 区,92% 红线 = 120,586 B):
* 配置(TEST_SUITE_CH395F + 阶段) Code ZI RW_IRAM1 距红线余量
* 产品基线(阶段全关) 214,104 131,852 75,632 57.7% 44,954 B
* 默认阶段 11/14(只切套件宏) 217,468 134,076 77,920 59.5% 42,666 B
* NET 层全开 6~11/13/14 218,992 141,688 85,552 65.3% 35,034 B
* HW 层全开 1~5/12/15(最坏态) 229,256 147,176 90,952 69.4% 29,634 B
* HW 层无需 PC 1/12/15(台架冒烟用) 215,244 134,896 78,672 60.0% 41,914 B
* 该条目关心的 PHASE5 三块静态缓冲(3 x PHASE5_CHUNK_SIZE = 4093)确实进了链接:
* hw_full 的 ch395f_test_task.o 数据段 = 12,285 B(3 x 4093 = 12,279 + 其余 6 B)。
* "理论余量足够"由未实测转为已实测:最坏态还余 29,634 B,不必把 .sct 扩到 192 KB
* (与该条目"不建议扩 scatter"的约束一致)。RW_CCM 四档恒为 57,376 B / 87.9%——
* 但该区已贴着 92% 线,任何往 CCM 加东西的改动都得单独核算。
*/
#if defined(ENABLE_PHASE1_TESTS) || defined(ENABLE_PHASE2_TESTS) || \
defined(ENABLE_PHASE3_TESTS) || defined(ENABLE_PHASE4_TESTS) || \
defined(ENABLE_PHASE5_TESTS) || defined(ENABLE_PHASE12_TESTS) || \