Files
STM32F4-Base/docs/测试说明/boot_log_data/README.md
T
wandering1 504db26698
CI / L0 静态门禁 (pre-commit) (push) Failing after 2m1s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 21s
docs(内存): 阶段子项改层级编号 4.阶段.项,消除与顶层章节同号撞面
根因:`RAM使用分析与优化方案.md` 顶层有 §1 背景 / §2 现状测量(2.1~2.6),而 §4
「方案」下"阶段 N"的子项也用裸号 0.x / 1.x / 2.x——阶段 2 的 2.1/2.2/2.3 与顶层
2.x **完全同号**,阶段 1 的 1.x 又长得像"第 1 章第 x 节"。`doc-links` 对本文自
引用按设计直接放过,于是门禁和人一起看错:AGENTS.md 把"栈余量台账"写成 §1.4,
而 §1.4 其实是阶段 1 的 lftpd 静态化项(上一笔提交的信息里我把它误判成断链,
已 amend 更正)。

改法:阶段子项一律改层级编号,阶段号不变、只加 `4.` 前缀 —— 0.x→4.0.x、
1.x→4.1.x、2.x→4.2.x。共改 14 个标题;文内自引用与实施序列表(S4~S9 那套)、
暂缓清单、§5 预期效果列里的裸号一并补成 §4.x.y。

外部引用同步 15 处:AGENTS.md、lftpd/README ×2、菜单页面设计、RAM预算台账 ×2、
项目架构总览 ×3、FTP_Test_Guide ×3、boot_log_data/README、部署环境要求、审查
报告、ram_baseline.py ×3。最有说服力的两处歧义:审查报告与 RAM预算台账都写
"缩堆见 …§2.2"——既可读成顶层 §2.2(静态大项排行)也可读成阶段 2 第 2 项,
现均为 §4.2.2(阶段 2 第 2 项"缩堆")。

另修 4 处把 §1.4 当"栈台账"的错指:采样有效性校验设计说明 :441/:593/:650 改
指 §2.3(任务栈配置与实测峰值)与 §4.0.6(静态最坏链与判定);id_aliases.json
 的 note 改指 §4.0.6 并标注"原 §1.4,2026-10-22 层级编号"。

冻结与示例:其它文档**变更记录行**里的旧编号按项目纪律不改写(项目架构总览
:367、RAM预算台账 :98),改在被引文档 §4 开头留一张换算表 + 约定说明;把旧号
当语法示例写的 7 处一并换掉(文档规范 ×3、check_doc_links ×3、rename_ref ×1),
否则示例本身指向已改名的锚点。主文档版本行 bump 到 v1.3 / 2026-10-22。

门禁:check_doc_links.py --all --sections-strict → 146 个文档 0 问题(章节引用
2513 处、机器可判定 1491);check_ids.py --strict 增量拦截通过;mem-numbers、
ram_baseline --gate(SRAM1 57.4% / CCM 87.9%)、task-table 全绿;本轮未改任何
.c/.h。16 个文件字节卫生自查 BOM/CR/U+FFFD/行尾空格全清。已提交本地,未推送。
2026-10-22 15:38:14 +08:00

7.1 KiB
Raw Blame History

启动日志(boot_log)存档

本目录保存 @test(.dsh/skills/serial-boot-test/scripts/run_boot_test.py)产出的开机串口日志快照, 用于跨构建的栈 / 堆水位对照(解析其中的 [STACK] 行)。

1. 为什么需要存档

  • @test 默认把 boot_log 写到临时目录 %TEMP%\serial-boot-test\boot_log_<时间戳>.txt——会被系统清理;
  • 台架长跑的 20MB 串口日志截头会丢掉早期 [STACK] 水位行(开机首次约 5s 后才报告);
  • 两者叠加导致无法事后回溯"改代码前后"的栈水位变化。

因此凡涉及栈 / 堆预算的改动或基线重采,必须把该轮的 boot_log 快照固化到本目录。

2. 约定

项 规则
来源 & '.venv\Scripts\python.exe' .dsh/skills/serial-boot-test/scripts/run_boot_test.py(默认 --out-dir %TEMP%\serial-boot-test,产出 boot_log_<stamp>.txt + selftest_log_<stamp>.log)
命名 <日期>_<构建标识>_boot_log.txt,例:20261005_prod_none_boot_log.txt
构建标识 建议含:产品 / 测试套件(prod_none / suite_ch395f …)+ 负载(idle / v5_30min / ftp_stress)
随文件登记 在下方 §3 清单登记日期、构建、负载、关键 [STACK] 水位(如 defaultTask 峰值)
入库门槛 只存有对照价值的快照——常规 @test 通过日志不必入库
故障注入日志 含刻意产生的 [ERR] 行(如兜底门闭锁)的日志用自定义标记集采集:--required 加闭锁/复归两行、--forbidden 去掉 [ERR] 保留 FAIL;ERROR;HardFault。此类日志的 PASS 只代表注入行为符合预期,不代表标记集等价于日常门禁

3. 清单

日期 构建 / 负载 关键 [STACK] 水位 文件
2026-10-10 prod_adc_tim6 / 开机 + 30 s 空载 adc 528/2048(74%);default 2164/4096(47%);heap free=15088 min_ever=7152 20261010_prod_adc_tim6_boot_log.txt
2026-10-10 prod_adc_l1 / 开机 + 30 s 空载 adc 584/2048(71%)(+56 B,L1 层 adc_input_poll/raw 上链);default 2164/4096(47%);heap free=15088 min_ever=7152 20261010_prod_adc_l1_boot_log.txt
2026-10-11 prod_phasor / 开机 + 30 s 空载(L2 台架闭环) adc 928/2048(54%)(+344 B,压环 + phasor_run + log_phasors 上链);default 2152/4096(47%);heap free=15088 min_ever=7152 20261011_prod_phasor_boot_log.txt
2026-10-11 prod_adc_health / 开机 + 30 s 空载(L1-6 + 抬栈 640 words) adc 952/2560(62%)(静态最坏链 1080 B,adc_health_report→syslog_post 回显尾);default 2152/4096(47%);heap free=14576 min_ever=6640(抬栈 -512 B,符合预算) 20261011_prod_adc_health_boot_log.txt
2026-10-12 prod(HEAD d3107f3,B4/B5 验收窗口 B6)/ 开机 + 30 s 空载 首采:iec104 424/2560(83%);protect 828/2048(59%,free_min 1220);新 56 KB 堆 heap free=17936 min_ever=10000(>3072 告警线,无 [HEAP] 告警);⚠ @test FAIL(缺陷证据快照):protect task start 锚点行字节级交错损坏(st[art: cycle=220ms elm=70,两次开机同形复现)= protectTask 违反控制台写者注册前门控纪律(控制台单写者日志设计说明.md §3.4),其余 8 Required / 零 [ERR] / 锚点×1 / 回读一致全过;缺陷已修(启动行改 writer-ready 首拍补打),修复后 PASS 见下行 20261012_B6_prod_boot_log_PROTECT_MISS.txt
2026-10-12 prod(B7 1fe163b + B6 门控修复)/ 开机 + 30 s 空载(B6 复测 PASS) protect 828/2048(59%,free_min 1220);iec104 424/2560(83%);heap free=17936 min_ever=10000(N-33 抬栈 min_ever 背书就绪);锚点行完好 cycle=20ms elm=7(+577 ms,写者 attach 后首拍);零 [ERR]、采样闭锁不误报 20261012_B6_prod_boot_log.txt
2026-10-12 同 MISS 固件(d3107f3)/ PC 主站 2404 往返(test/host/iec104_master.py) STARTDT/总召四组+actterm/C_SE 两段写触发 YX15·16 变位(COT=3)/恢复复归/YK11 两段正答/C_RD 读回 10.000 → 18/18 PASS(104 链与锚点缺陷无关,验收窗口固件本身上先行闭环) 20261012_B6_iec104_roundtrip_pre-fix_log.txt
2026-10-12 同 PASS 固件(B7+fix)/ PC 主站 2404 往返(复测) 同上全链 18/18 PASS——B7 set_sealed+持久化写路径下 C_SE→YX 联动仍成立(B5 遗留"104 YX 联动"腿闭环) 20261012_B6_iec104_roundtrip_log.txt
2026-10-12 同 PASS 固件 / B7 定值持久化 + 软压板 YK12 台架腿(test/host/iec104_master.py --b7-pre/--b7-post/--b7-mark/--b7-check,中间 ST-LINK 复位) pre 21/21:C_SE 写 7.5+C_RD 回读、YK12 两段 OFF → 0.05 A 低定值不动作(保护退出)、YK12 ON → YX15/16 立即动作(COT=3)、收尾留压板退出;post 13/13:压板退出态跨复位保持(开机日志 global plate OUT -> protection disabled + 低定值仍不动作)、重启后 YK12 ON 即动作(联动在位);mark/check 4/4+4/4:非默认定值 7.5 跨复位保持(C_RD=7.500,与出厂默认可区分);开机日志两次 [CFG] prot set loaded (/prot_set.bin) 20261012_B7_iec104_persist_log.txt / 20261012_B7_persist_boot_log.txt
2026-10-12 prod(B9 1d96fc9 sync 追平 B8/N33 后重跑,merge 6cbf400 覆盖代码)/ B9 SOE 动作记录 + 时标台架腿 @test PASS:锚点 protection init: OK (set=40 elm=9)、freq layer init: OK、freq(hb): f=0 valid=0(浮空不发散)、prot set blob version change (ver=1 cnt=32), defaults in use(B8 换代 INFO ≠ CORRUPT 实证)、零 [ERR]、protect 828/2048(59%,与静态 872 相符);主站回归 --b7-pre 21/21 + --b7-post 13/13 不回归,自发 YX = M_SP_TB_1 带 CP56 时标(动作/复归/重启后联动三段,iv=0);FTP 下载 /log/soe.log 56 条 test/host/soe/decode_soe.py --max-elm 16 PASS(boot 段内 seq 严格 +1、ELM_ASSERT 26、CP56↔epoch UTC 交叉一致);.bin 为原始 64 B 记录可复解码 20261012_B9_prod_boot_log.txt / 20261012_B9_iec104_soe_pre_log.txt / 20261012_B9_iec104_soe_post_log.txt / 20261012_B9_soe_pre.bin + 20261012_B9_soe_after_post.bin / 20261012_B9_soe_decode_pre.txt + 20261012_B9_soe_decode_post.txt
2026-10-21 prod + 兜底新鲜度门停 TIM3 注入探针(task/adc-health-design-doc,探针已撤)/ 开机 + 45 s protect 620/2048(69%)、adc 与 heap 水位同前;[ERR][PROT] … blocked (hf=0x00000100) +5462ms、recovered +5757ms、health: 0 次、reset cause: ×1 20261021_probe_stale_gate_boot_log.txt

4. 关联

  • 沉淀约定:../测试开发标准流程.md §7.3
  • 栈水位探针与基线:../../内存管理/RAM使用分析与优化方案.md §4.0.2 / §4.0.6
  • 当前诊断基线:../../任务规划/基线与待确认.md §3
  • 本流程立项:原 ../../任务规划/README.md S-2(2026-09-22 提出;2026-10-05 固化为本节流程后销项)