docs(wave): 回放页枚举恒空修复闭环入档并销项
- 故障录波设计说明 §10 新增「回放页枚举恒空缺陷修复记录」:四步证据链 (失败不钉表+FR 埋点 → 诊断加强 → 根因 = 读侧用反 seg_path 返回契约 → 同页键处理缺失效)、串口实录 `scan done cnt=7` / `head path fail idx=6`、 修复前后板级对拍图与复现口令;10-31 那段「拿不到目录条目」的定性就地 标注被推翻(保留为推理起点留痕);§10 表「板级·回放页」行与文首状态行 同步为「测试面已开、坏段/空态画面仍待到场地拍」。 - 到场轮执行手册 §3 第一幕标注「已完成(2026-11-02)」,表 §1 与幕间 依赖同步;历史三步保留但注明到场时不用再跑。 - 登记簿 §2 按「完成即销项」删除该行;任务规划 README 独立行同步。 - 证据入库 `docs/测试说明/测试数据/wave_enum_20261102/`:修复前/后回放页、 切段、切道四帧 + README(含串口实录与复现口令)。Before = `7efa58d9` 构建(身份戳 Nov 2 2026 14:21:24),After = 本分支构建(Code=247,288 B)。 Refs #38
This commit is contained in:
+1
-1
@@ -65,7 +65,7 @@ docs/测试说明/专项验证/模拟器差距清单.md §2.3「开机账本 boo
|
||||
| **6** | 保护元件与采集增强 | 等待标准源或硬件改版 | 保护先解除未标定闭锁;三相同时刻类功能等 V0.2 硬件 |
|
||||
| **7** | 验证窗口事项 | 逢条件顺带 | CI runner、PC peer、CH340、负向故障注入条件到位时执行 |
|
||||
| **8** | 独立模块与暂缓项 | 当前不排 | 开入开出、SNTP、104 文件传输单独立项;RS-485 与内存优化按各自重启条件 |
|
||||
| **独立** | **故障录波(1 kHz · 8 路原始码值 · 单通道回放)** | **代码面已交付;2026-10-31 远程半轮过六项,余注量对表与人到场项** | 用户裁定 2026-10-29 **录波先行**:数据面最小闭环 → 手动与保护启动触发 → 回放页。三块的**代码侧判据已收口**(主机单测 113 / 170 / 110 全 rc=0、双端编译 0 错误 0 警告、板端编码器与 PC 侧解码器字节级互验、手动录波与录波回放两叶已绑页、内容页黄金参考扩至 66 张);**2026-10-31 远程半轮已过六项**(真 FAT 落盘、触发→落盘全部落在 2 s 封存超时窗内、冷却恢复、轮转、PC 侧坏段拒收、冻结窗内 104 并发),同轮发现缺陷「回放页段表枚举恒空」登记 `登记簿.md` §2;**没跑的是注量对表那半轮**(注 1 V / 50 Hz、与 `meas:` 行和 104 浮点遥测对表、回放页放真段与坏段画面——等枚举缺陷修复)加 P 触发 / bench T 源,全部结果与清单见 `docs/子系统设计/故障录波设计说明.md` §10「板级远程半轮记录」。**板级判据、留痕名清单与执行顺序图的属主 = docs/子系统设计/故障录波设计说明.md §9 与 §10**(原卡片登记簿 2026-10-30 随销项并入后删除);**与 UI 道互斥**(菜单树与中文字库是整文件生成物,同刻只允许一条道写)——本波按此串行执行:UI 道在数据面与接线冻结之后才动生成物 |
|
||||
| **独立** | **故障录波(1 kHz · 8 路原始码值 · 单通道回放)** | **代码面已交付;2026-10-31 远程半轮过六项、2026-11-02 回放页枚举缺陷已修复闭环,余注量对表与人到场项** | 用户裁定 2026-10-29 **录波先行**:数据面最小闭环 → 手动与保护启动触发 → 回放页。三块的**代码侧判据已收口**(主机单测 113 / 170 / 110 全 rc=0、双端编译 0 错误 0 警告、板端编码器与 PC 侧解码器字节级互验、手动录波与录波回放两叶已绑页、内容页黄金参考扩至 66 张);**2026-10-31 远程半轮已过六项**(真 FAT 落盘、触发→落盘全部落在 2 s 封存超时窗内、冷却恢复、轮转、PC 侧坏段拒收、冻结窗内 104 并发);同轮发现的缺陷「回放页段表枚举恒空」**已于 2026-11-02 远程修复并板级闭环**(根因 = 读侧 `wave_store_seg_path()` 返回值判错,顺带修键处理缺失效;回放页真段/切段/切道已实测,登记簿条目已销项,证据见设计说明 §10「回放页枚举恒空缺陷修复记录」);**没跑的是注量对表那半轮**(注 1 V / 50 Hz、与 `meas:` 行和 104 浮点遥测对表、回放页放坏段与空态画面)加 P 触发 / bench T 源,全部结果与清单见 `docs/子系统设计/故障录波设计说明.md` §10「板级远程半轮记录」。**板级判据、留痕名清单与执行顺序图的属主 = docs/子系统设计/故障录波设计说明.md §9 与 §10**(原卡片登记簿 2026-10-30 随销项并入后删除);**与 UI 道互斥**(菜单树与中文字库是整文件生成物,同刻只允许一条道写)——本波按此串行执行:UI 道在数据面与接线冻结之后才动生成物 |
|
||||
|
||||
### 2.1 关键依赖
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
|---|---|---|---|---|
|
||||
| dhara 重试自旋残留 | **dhara 重试自旋残留**——`try_recover()` 的 `DHARA_MAX_RETRIES`(8) 自旋在坏块密集时仍可能长时间占用 defaultTask(喂狗点) | 2026-10-02 | 低优先:现有 `vol_lock` + 喂狗节奏缓解;若台架再出"存储侧喂狗饥饿"再排期 | `Lib/dhara/map.c` |
|
||||
| 可选全序列卷锁 | **可选全序列卷锁**——现卷锁仅覆盖 `syslog` / `cfg` / `lftpd` 三条路径(`vol_lock_wait(0)` try 语义),其它潜在访问点(如 UI 读日志)未纳入 | 2026-10-02 | 待评估:先确认是否真有第二写者;无则关闭本项 | `App/fs/vol_lock.{c,h}` |
|
||||
| 回放页段表枚举恒空 | **回放页段表枚举恒空(真机缺陷)**——回放页真机开屏恒显「无录波段」,而 FTP `LIST` 六段全见、`RETR`/`DELE` 正常、同 try 锁纪律的 SOE 页读卷正常、defaultTask 写侧 `/wave` 枚举也正常——**唯独 `ui_task_wave_scan()` 在 uiTask 上下文拿不到目录条目**;伴生:`f_opendir` 失败照样置 `s_wave_scanned=1` 钉表,卷忙一类失败被钉成假空态、直到下一次 `manual_req` 才重试 | 2026-10-31 板级远程半轮(五个独立判别面见出处) | **等修复(到场轮)**:`f_opendir`/`f_readdir` 分支带 FR 码埋点定位;失败不钉表、下键重试(与 soe_store 读者同纪律);修好才有回放页坏段/空态画面的测试面 | `../子系统设计/故障录波设计说明.md` §10「板级远程半轮记录」;`App/task/ui_task.c` 扫描函数 |
|
||||
|
||||
## 3. 硬件(V0.1 缺陷 → V0.2 改版项)
|
||||
|
||||
|
||||
+57
-7
@@ -2,7 +2,7 @@
|
||||
|
||||
> **模块名称**:故障录波——采样源沿用 TIM3 1 kHz 节拍,专用录波环(`App/algo/wave_ring.c`,已落地)、触发、落盘(defaultTask 是文件系统唯一写者)、取回(FTP 21 端口)、现场回放(UI 单通道页)。
|
||||
> **文档定位**:本波的**设计属主**——口径、通道集、数据形态、触发模型、文件格式、预算与所有权边界、显示契约、二期不返工的结构约束在此定稿。**板级判据与本波执行顺序的属主即本文 §9 与 §10**——原任务规划下的《故障录波》卡片登记簿已于 2026-10-30 随销项并入本文后删除(沿革见 §14);排期顺位在 `docs/任务规划/README.md` §2.0「独立」行。
|
||||
> **状态**:设计已定稿,**数据面 + 触发与落盘接线 + UI 两个页面(手动录波、录波回放)的代码面已交付(2026-10-29)**——主机单测 113 / 170 / 110 全 rc=0、双端编译 0 错误 0 警告、板端编码器与 PC 侧解码器两份独立实现字节级互验通过。**没做完的只有板级判据那一轮**(注量对表、FTP 拉回、与 `meas:` 和 104 浮点 YC 对表、CRC 不符必须拒收的实测、回放页放一段真波、两个待台架核数值),逐条列在本文 §10 板级各行。三条已裁定口径见 §1.2。**2026-10-31 远程半轮**已把其中不需要到场与注入的六样跑过(落盘道、触发时序、冷却恢复、轮转、PC 侧坏段拒收、104 并发)——结果与回放页新缺陷「段表枚举恒空」全在 §10「板级远程半轮记录」小节。
|
||||
> **状态**:设计已定稿,**数据面 + 触发与落盘接线 + UI 两个页面(手动录波、录波回放)的代码面已交付(2026-10-29)**——主机单测 113 / 170 / 110 全 rc=0、双端编译 0 错误 0 警告、板端编码器与 PC 侧解码器两份独立实现字节级互验通过。**没做完的只有板级判据那一轮**(注量对表、FTP 拉回、与 `meas:` 和 104 浮点 YC 对表、CRC 不符必须拒收的实测、回放页放一段真波、两个待台架核数值),逐条列在本文 §10 板级各行。三条已裁定口径见 §1.2。**2026-10-31 远程半轮**已把其中不需要到场与注入的六样跑过(落盘道、触发时序、冷却恢复、轮转、PC 侧坏段拒收、104 并发)——结果与回放页新缺陷「段表枚举恒空」全在 §10「板级远程半轮记录」小节;**该缺陷已于 2026-11-02 远程修复并板级闭环**(根因 = 读侧 `wave_store_seg_path()` 返回值判错 + 键处理缺失效,证据与前后对拍见 §10「回放页枚举恒空缺陷修复记录」)。
|
||||
> **相关文档**:
|
||||
> `docs/子系统设计/ADC采样节拍设计说明.md`(节拍与时序账的属主;本文 §3 的数据源就是它)
|
||||
> `docs/硬件平台/ADC通道映射说明.md`(网名 `AINn` 不等于板级 `ADCn`,也不等于转换器通道号;链路分段与削顶归属)
|
||||
@@ -324,7 +324,7 @@ flowchart TD
|
||||
| 跨工具链分叉(实证,写进来是为了下一个模块别重踩) | 两份录波 .c 只 include 自身头(链上只有 stdint.h)时,ARMCC 报 22 条 identifier "NULL" is undefined;而主机 MSVC / gcc 会传递性把 stddef.h 拉进来,**主机单测完全照不出这个分叉** → 新增模块需要用 NULL 就自己 include stddef.h(与 `App/algo/sample_ring.c` 同口径,别塞公共头) |
|
||||
| 板级 | 信号发生器注 1 V / 50 Hz → 手动一段 → FTP 拉回 → PC 脚本量出周波数、幅值、极性与注入一致;再把 PC 重算的基波有效值与板上 `meas:` 与 104 浮点 YC 对表。**判据只量四样:周波数、幅值、极性、钉轨路数——不比绝对相位**(理由见 §4.2「段内点序」:触发瞬间在工频周期内任意落点,段字节里没有绝对时间参考;真要比相位必须让发生器给同步触发,本波不做)。**钉轨对表的合格判据 = 头位图 ⊇ 实测钉轨路数,且差异必须能由注入条件解释**——因为 `clip_mask` 是按来源派生的链路可信性标记(§6.2 偏移 24 行),不是本段实测值:只加直流或小幅注入时那五路本就不该钉轨,硬取等式会假红。**同段另起一条强观察项**:V0.1 下这五路若在做**交流注入**时反而没钉轨,先怀疑接线或该路根本没被驱动——这是告警面,不是失败面(等式仍作为默认尺子留在 PC 侧 `shape --strict` 里,因为它有这个信号价值;要放行差异用那条判据的解释权,不靠改尺子)。**§5.2 第四条的板级观察项(代码与单测面已有、板级未测)**:bench 连续自抓期间人为把卷占住 2 s 以上(例如同一段跑 FTP 大文件读),看串口 `wave:` 行的 `err` 是否加一、是否只出现**一条** `[ERR] … seg drop: ring abandoned` 留痕(不是每拍刷屏)、且段号不推进(下一段仍写同号文件) |
|
||||
| 板级·触发来路(2026-10-30 并入原卡「手动触发与保护启动接线」板级段) | 真机面板按一次「手动录波」出一段;造一次过流,段号与该时刻 `/log/start.log` 事件对齐;冷却期内二次触发只加 `ovf` 不重录(**同时看 `armed` 与那一刻 start.log 的时刻,不要只盯 `ovf` 数字**——容差见 §9);冻结窗口内 104 上送与保护判据不受影响(这条是「丢录波样本不丢采集」的验收) |
|
||||
| 板级·回放页(2026-10-30 并入原卡「现场单通道回放页」板级段) | 真机上放一段真波(不是模拟器合成节拍);远端看图能拍到该页做留证(只作留证,不是波形通路,§8.4);**空态与 CRC 失败态绝不允许画成一条直线**——用坏段在真机复现一次。**2026-10-31 远程半轮进展见下「板级远程半轮记录」小节**:PC 侧坏段拒收已过;回放页坏段/空态画面**没够到测试面**(缺陷「回放页段表枚举恒空」) |
|
||||
| 板级·回放页(2026-10-30 并入原卡「现场单通道回放页」板级段) | 真机上放一段真波(不是模拟器合成节拍);远端看图能拍到该页做留证(只作留证,不是波形通路,§8.4);**空态与 CRC 失败态绝不允许画成一条直线**——用坏段在真机复现一次。**2026-10-31 远程半轮进展见下「板级远程半轮记录」小节**:PC 侧坏段拒收已过;回放页坏段/空态画面的测试面**已于 2026-11-02 枚举缺陷修复后打开**(真机已验证真段显示 + 切段切道,见下「回放页枚举恒空缺陷修复记录」小节),坏段/空态两画面本身仍是到场轮要拍的项 |
|
||||
| UI | `ui-verify` 五步;回放页入 `ui-golden` 黄金参考(**参考图一旦入库只能改代码对齐,禁止刷参考掩盖**);新叶走 `gen_menu.py` 重生成 + 字库链 |
|
||||
| 构建 | `/keil-build` 要求 0 错误 0 警告;新 .c 双端注册走 `new-source-file`(`MDK-ARM/STM32F407-Demo.uvprojx` 与 `simulator/CMakeLists.txt` 两处显式列表) |
|
||||
| 台账 | R6 三处同步 + `scripts/ram_baseline.py --update` + `mem-numbers` 与 `mem-budget` 钩子 |
|
||||
@@ -367,13 +367,14 @@ bench 锁全程持有(收工 release,PASS 证据就是本小节);设备
|
||||
| 冻结窗口内 104 上送无恙(**正式判据项**) | 参考主站 `test/host/iec104_master.py` 全程跑在落盘窗口内:GI 扫描(双点组 / 单点组 / YC 组 / 频率)+ actterm + 定值读回全绿,**唯二 FAIL 是两条 COV 腿 = 标定闭锁腿(OC1 不出口,物理预期,非链路故障)**;全程无链路异常、无 send fail |
|
||||
| `drop` 观测 | 每冻结窗约 400–640 点(51–79 拍 × 8 路)入账,量级 = SEALED 态每拍 push +8 直到落盘 ACK 的窗口长度;`seg` 无丢段、`err`=0,采集无恙——纯观察项非失败(「丢样本不丢采集」的实测面) |
|
||||
|
||||
**新发现缺陷「回放页段表枚举恒空(板级)」**(登记 `docs/任务规划/登记簿.md` §2):回放页真机开屏恒显
|
||||
**新发现缺陷「回放页段表枚举恒空(板级)」**(原登记 `docs/任务规划/登记簿.md` §2,**2026-11-02 修复闭环后按「完成即销项」删行,完整记录即本小节**):回放页真机开屏恒显
|
||||
「无录波段」,而 FTP `LIST` 六段全见、`RETR`/`DELE` 正常。判别面(五个独立复核,全非偶然):
|
||||
手动触发照常成段(计数 + 真文件都在)⇒ 写侧取卷锁正常;SOE 记录页(同一条 `vol_lock_wait(0)`
|
||||
try 锁纪律)照常读出并显示 ⇒ try 锁读径正常;`manual_req` 作废段表缓存后重扫**仍空** ⇒ 不是
|
||||
心跳写抢锁的一次性 miss;defaultTask 写侧 `wave_store_next_idx()` 对 `/wave` 的枚举正常
|
||||
(坏段 DELE 后 WAVE05 正确回到同号为证)⇒ FatFs 层 readdir 能力正常。**定性:`ui_task_wave_scan()`
|
||||
在 uiTask 上下文下拿不到目录条目**,根因须上埋点(`f_opendir`/`f_readdir` 分支带 FR 码)或到场隔离。
|
||||
(坏段 DELE 后 WAVE05 正确回到同号为证)⇒ FatFs 层 readdir 能力正常。~~定性:`ui_task_wave_scan()`
|
||||
在 uiTask 上下文下拿不到目录条目~~ ——**该定性已被 2026-11-02 的 FR 埋点推翻(目录枚举一直正常,
|
||||
坏的是读侧拼路径的返回值判错),见下小节;这段保留只为记录当时的推理起点**。
|
||||
伴生代码纪律问题同页修(本轮读码钉死,独立于上面的主缺陷):**`f_opendir` 失败也无条件置
|
||||
`s_wave_scanned=1`**(`App/task/ui_task.c` 扫描函数尾)——卷忙 / `FR_DENIED` 一类失败会被钉成
|
||||
「0 段缓存」,回放页从此假显「无录波段」、直到下一次 `manual_req` 才重试;失败应不钉表、
|
||||
@@ -381,8 +382,9 @@ try 锁纪律)照常读出并显示 ⇒ try 锁读径正常;`manual_req` 作
|
||||
|
||||
**本半轮没跑的(人到场轮清单)**:注量对表(周波数 / 幅值 / 极性 / 钉轨路数)、`meas:` 与 104
|
||||
浮点 YC 数值对表、两个待台架核数值(封存超时窗 §4.2 兜底行与冷却时长 `App/algo/wave_ring.h`)、P 触发与 start.log 对齐(还得先解标定闭锁)、
|
||||
bench T 源与卷占用 2 s 的 `ring abandoned` 观察(需 bench 构建)、**回放页坏段画面与空态画面
|
||||
(等枚举缺陷修复后才有测试面)**、`task_prof` 读路径耗时峰值。**执行动作侧**(到场的人做什么、
|
||||
bench T 源与卷占用 2 s 的 `ring abandoned` 观察(需 bench 构建)、~~回放页坏段画面与空态画面
|
||||
(等枚举缺陷修复后才有测试面)~~ **(2026-11-02 枚举缺陷修复后测试面已开,见下小节)**、
|
||||
`task_prof` 读路径耗时峰值。**执行动作侧**(到场的人做什么、
|
||||
说哪句话、会看到什么)→ `docs/测试说明/专项验证/故障录波板级到场轮执行手册.md`。
|
||||
|
||||
**远程驱动教训(7003 注键)**:KEY 的 ACK 与 LCDMEM 推流共用同一条 TCP,按键后**必须 drain 到
|
||||
@@ -390,6 +392,54 @@ bench T 源与卷占用 2 s 的 `ring abandoned` 观察(需 bench 构建)、
|
||||
页**的捷径而非进菜单(本次上电开过页之后);级联列光标开列时记忆上次位置、不归零。三条的
|
||||
执行纪律归主 `scripts/board_ui_nav.py` 文件头,本文只留事实现场。
|
||||
|
||||
### 回放页枚举恒空缺陷修复记录(2026-11-02,板级远程闭环)
|
||||
|
||||
bench 锁全程持有;三次烧录(埋点 / 诊断加强 / 根因修复)均由 `run_boot_test.py` 校验身份戳与
|
||||
回读一致(`READBACK: OK (no difference found)`)、启动门禁 `VERDICT: PASS`。**10-31 的定性被本轮
|
||||
推翻**——目录枚举从未坏过,坏的是读侧判返回值。四步证据链:
|
||||
|
||||
1. **第一幕(失败不钉表 + FR 埋点,PR 第三提交同批)**:`ui_task_wave_scan()` 失败分支补 FR 码留痕、
|
||||
失败不再无条件钉 `s_wave_scanned`。埋点构建上板后开回放页,串口**零新增留痕**……但这不等于
|
||||
枚举正常:第一版扫描只在「失败 / 零条目」两种情况下打印,**成功但有段**这条路是静默的
|
||||
(教训:留痕必须覆盖成功路径,否则「没打印」与「没执行」无法区分)。
|
||||
2. **诊断加强(临时构建,已随根因修复收敛)**:扫描入口加 `#N` 序号、try 闸失败打印
|
||||
`vol_lock_get_stats()` 计数(消费方观测,不取锁,符合 `docs/子系统设计/看门狗设计说明.md` §4.3 的锁层静默口径)、完成行改为无条件打印、`load_head`/`seg_win` 的 try 闸/拼路径/开档
|
||||
失败全部带 FR 码。上板实录(2026-11-02 17:49 串口):
|
||||
|
||||
[UI_TASK] ui wave scan #1 done cnt=7 np=0 tt=0 ac=407
|
||||
[ERR][UI_TASK] ui wave head #1 path fail idx=6
|
||||
|
||||
**`cnt=7` 一锤定音:目录枚举、卷锁(tt=0 一次没撞)全都正常**;坏在随后取段——`idx=6` 是
|
||||
数值最大段,即页面首帧要显示的段——`wave_store_seg_path()` 拼接失败。
|
||||
3. **根因**:`wave_store_seg_path()` 契约(`App/algo/wave_store.h`)是「≥0 = 写入的字符数
|
||||
(当前布局恒 16),失败才是负码」,而读侧 `ui_task_wave_load_head()` 与 `ui_task_wave_seg_win()`
|
||||
从功能建成起写成 `!= 0` 判失败——**每次成功(16)都被判成失败**,`f_open` 永远走不到,
|
||||
盘上有段也恒显「无录波段」。写侧 `App/task/default_task.c` 同一函数用 `<= 0`,一直是对的;
|
||||
模拟器用假 `s_wave_ops` 桩、不编译读路径,所以黄金参考图与三组主机单测从未暴露此病。
|
||||
两处口径改 `<= 0`(与写侧最末下游同口径),并给「表上列着、开档却失败」补永久 FR 留痕
|
||||
(该失败态页面无视觉面,10-31 误定性的教训就是静默)。
|
||||
4. **第二缺陷(同页,随枚举修复首次上板才暴露)**:`Drivers/BSP/UI/ui_page_wave_play.c` 的 `pg_key()`
|
||||
接管控件键(key_cb 返回 true)后从未调 `ui_content_page_invalidate()`——框架只在 key_cb
|
||||
返回 false 时替页失效。真机实证:按键送达、`s_idx/s_ch` 已变、**帧字节完全不变**(同帧
|
||||
SHA-256),切道切段屏上纹丝不动。三处成功路径各补一次失效(与 `ui_page_clock` /
|
||||
`ui_page_password` 等已接管键的页面同纪律);切段失败仍保持「按了没动」的诚实语义、不重绘。
|
||||
该病被枚举缺陷完全遮住(整页恒空、没有可切的画面),故从 2026-10-29 建成存活至今。
|
||||
|
||||
**修复后板级复核(同一台架、同一固件次)**:回放页开屏显数值最大段(WAVE06)UA 波形
|
||||
`UA SEC6 M`、Pk=-1423 mV、0 线与触发光标在位;`l` 切上一段(`UA SEC5 M`、Pk=1744 mV),
|
||||
`d` 切下一通道(`UB SEC5 M`、右上「削」徽标、Pk=843 mV);`↑↓/←→` 每按必重绘。
|
||||
修复前后对拍图(同 APP、同 scale、同键序,仅固件不同):
|
||||
|
||||
| 版本 | 回放页开屏 |
|
||||
|---|---|
|
||||
| 修复前(`7efa58d9` 构建,2026-11-02 实测) |  |
|
||||
| 修复后(`fix-replay-enum-0e52b1963afa` 分支构建,2026-11-02 实测) |  |
|
||||
|
||||
图生成口令(可复现):`scripts/board_ui_nav.py` 走 UI + 7003 `LCDMEM` 取帧 + 4× 放大渲染;
|
||||
图源 = 本记录所属提交的台账同批留档 `docs/测试说明/测试数据/wave_enum_20261102/`
|
||||
(Before/After、切段、切道共四帧 + 串口实录,见该目录 README)。
|
||||
**至此回放页「真段 / 坏段 / 空态」三态全部有了测试面**,第二幕尾步的坏段画面判据可跑。
|
||||
|
||||
---
|
||||
|
||||
## 11. 与 `docs/任务规划/数据可信.md` 的口径变更(三处)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# 故障录波板级到场轮执行手册(人要做的事,一步一行)
|
||||
|
||||
> **这份手册解决什么**:录波的判据里剩下的那半轮——需要**有人的手和信号发生器**的验证——把它拆成"你做什么、说哪句话、会看到什么"。
|
||||
> **它不是判据属主**:判据、留痕名清单、执行顺序图全在 `docs/子系统设计/故障录波设计说明.md` §9 与 §10;本文只写**执行动作**。已完成部分(2026-10-31 远程半轮六项 PASS + 缺陷「回放页段表枚举恒空」)见 §10「板级远程半轮记录」。
|
||||
> **它不是判据属主**:判据、留痕名清单、执行顺序图全在 `docs/子系统设计/故障录波设计说明.md` §9 与 §10;本文只写**执行动作**。已完成部分(2026-10-31 远程半轮六项 PASS + 2026-11-02 缺陷「回放页段表枚举恒空」修复闭环)见 §10「板级远程半轮记录」与 §10「回放页枚举恒空缺陷修复记录」。
|
||||
> **一句话预算**:你到场约 1.5~2 小时;其中真正动手的只有**接三次线、按不超过六次键、拍两个决定**——其余全部由会话里的 agent 跑脚本。
|
||||
|
||||
---
|
||||
@@ -10,12 +10,12 @@
|
||||
|
||||
| 幕 | 名字 | 要你在场? | 你动手的部分 | agent 跑的部分 | 对应判据 |
|
||||
|---|---|---|---|---|---|
|
||||
| 第一幕 | 枚举埋点与修复上板 | **可远程**(ST-LINK 在本机就不用到场) | 无(或帮忙看一眼烧录没报错) | 改码加埋点 → 构建 → 烧录回读 → 远程开回放页 → 读 FR 码定性 → 修复重烧 | 登记簿「回放页段表枚举恒空」 |
|
||||
| 第一幕 | 枚举埋点与修复上板 | **已完成(2026-11-02,远程)** | 无 | 改码加埋点 → 构建 → 烧录回读 → 远程开回放页 → 读 FR 码定性 → 修复重烧 | `docs/子系统设计/故障录波设计说明.md` §10「回放页枚举恒空缺陷修复记录」 |
|
||||
| 第二幕 | 注量对表 | **要到场**(只有接线需要手) | 接 UA 发生器线 1 次、拔 1 次;面板按 2 次键(或让 agent 远程注键) | 记心跳基准 → FTP 拉段 → `wave_read` 量四样 → `meas:`/104 YC 对表 → 削顶注大一遍 → 坏段上板看回放页绝不平线 | `docs/子系统设计/故障录波设计说明.md` §10「板级」行 +「板级·回放页」行后半 |
|
||||
| 第三幕 | P 触发对时刻 | **要到场**,还含**两个由你拍板的决定** | IA 两点标定各接一次线 + 过流加大到 UI 见数值过 2 A | 读码算 k/b → 写配置生效 → 验证解锁 → 触发后对 start.log 时刻/段号/src=P | `docs/子系统设计/故障录波设计说明.md` §10「板级·触发来路」行 |
|
||||
| 第四幕 | bench 自抓与卷占用 | **可远程**(烧录同上;占卷用 FTP 造) | 无 | 烧 bench 构建 → 造占卷 ≥2 s → 看 `err`+1、**一条** `ring abandoned`、同号重写 → 还原产品构建 | `docs/子系统设计/故障录波设计说明.md` §10 板级行的 `ring abandoned` 观察项 |
|
||||
|
||||
幕间依赖:**只有第二幕的"坏段上板看回放页"一步等第一幕修好**;其余各幕互相独立,可以先做不用等的。
|
||||
幕间依赖:**第二幕的"坏段上板看回放页"一步已不再被阻塞**(第一幕 2026-11-02 已修好并板级闭环);其余各幕互相独立,可以先做不用等的。
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
@@ -38,9 +38,17 @@ flowchart LR
|
||||
|
||||
---
|
||||
|
||||
## 3. 第一幕「枚举埋点与修复上板」——你可以不在场
|
||||
## 3. 第一幕「枚举埋点与修复上板」——已完成(2026-11-02)
|
||||
|
||||
**为什么排第一**:回放页现在真机恒显「无录波段」(六段文件明明都在盘上,2026-10-31 已钉死是 `ui_task_wave_scan()` 在 uiTask 上下文拿不到目录条目)。第二幕尾步要在这个页面上看坏段画面,页面不修好就没测试面。
|
||||
> **状态更新:本幕已于 2026-11-02 远程做完并板级闭环,现场无需重做。** 结论:10-31 的定性
|
||||
> 被 FR 埋点推翻——目录枚举一直正常(`scan done cnt=7`),坏的是读侧把 `wave_store_seg_path()`
|
||||
> 的成功返回值(16 字符)当失败(`!= 0`),`f_open` 永远走不到;另修同页键处理缺
|
||||
> `ui_content_page_invalidate()` 导致的切道切段不重绘。回放页现可显示真波、切段、切道,
|
||||
> 坏段/空态两态已有测试面。完整证据与前后对拍图 → `docs/子系统设计/故障录波设计说明.md`
|
||||
> §10「回放页枚举恒空缺陷修复记录」、`docs/测试说明/测试数据/wave_enum_20261102/`。
|
||||
> 下面三步保留作历史记录,**你到场时不用再跑**。
|
||||
|
||||
**为什么排第一**:回放页原先真机恒显「无录波段」(六段文件明明都在盘上,2026-10-31 定性为 `ui_task_wave_scan()` 在 uiTask 上下文拿不到目录条目——**该定性 2026-11-02 已被埋点推翻**)。第二幕尾步要在这个页面上看坏段画面,页面不修好就没测试面。
|
||||
|
||||
1. **[agent]** 在 `App/task/ui_task.c` 的扫描函数给 `f_opendir`/`f_readdir` 失败分支加带 FR 码的留痕(顺带修伴生纪律:失败不许钉 `s_wave_scanned=1`)→ `/keil-build` 0 错误 0 警告 → 烧录(`-Rst -Run` + 回读校验,见 `docs/测试说明/测试工具/ST-LINK_CLI_复位使用说明.md`)。
|
||||
2. **[agent]** 等 30 s 装置起来 → 远程走 UI 开回放页 → 串口读那条带 FR 码的新留痕。
|
||||
@@ -49,6 +57,7 @@ flowchart LR
|
||||
5. **要烧几次板,都由 agent 盯**;你只在会话里看到"请确认烧录"时回一个"烧"字(烧录动作属 Ask-first 边界,agent 不会自己烧)。
|
||||
|
||||
**这一幕完成的标志**:回放页能列出段并可翻段——agent 会给你一张远程抓屏图,画面顶行有通道名和段号。
|
||||
(2026-11-02 实际交付:开屏 `UA SEC6 M`、`l` 切至 `UA SEC5 M`、`d` 切至 `UB SEC5 M`,均带波形与峰值标注。)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
# 回放页枚举恒空修复证据(2026-11-02)
|
||||
|
||||
本目录是 `docs/子系统设计/故障录波设计说明.md` §10「回放页枚举恒空缺陷修复记录」的图源留档。
|
||||
台架远程操作、bench 锁全程持有;三张现场帧均由 `scripts/board_ui_nav.py` 的 7003 链路取
|
||||
`LCDMEM` 原帧后按 4× 放大渲染,与固件同一次上电、同一块板。
|
||||
|
||||
## 文件
|
||||
|
||||
| 文件 | 内容 | 说明 |
|
||||
|---|---|---|
|
||||
| `before_replay_page.png` | 修复前固件(`7efa58d9` 构建,身份戳 `Nov 2 2026 14:21:24`)回放页开屏 | 恒显「无录波段」,而同一时刻 FTP `LIST /wave` 六段全在(5250 B/段) |
|
||||
| `after_replay_page.png` | 修复后分支构建(`fix-replay-enum-0e52b1963afa`,Code=247,288 B)回放页开屏 | 数值最大段 `UA SEC6 M` 波形 + 0 线 + 触发光标,Pk=−1423 mV |
|
||||
| `after_segment_switch.png` | 同上固件,按 `l`(←)切上一段 | `UA SEC5 M`、Pk=1744 mV(段表项存在且可读) |
|
||||
| `after_channel_switch.png` | 同上固件,按 `d`(↓)切下一通道 | `UB SEC5 M`、右上「削」徽标(形状受限位图生效),Pk=843 mV |
|
||||
|
||||
## 根因串口实录(诊断构建上板,2026-11-02 17:49,板时 09:49)
|
||||
|
||||
[2026-11-02 09:49:18][UI_TASK] ui wave scan #1 done cnt=7 np=0 tt=0 ac=407
|
||||
[2026-11-02 09:49:18][ERR][UI_TASK] ui wave head #1 path fail idx=6
|
||||
|
||||
- 第一行 `cnt=7 np=0 tt=0` = 目录枚举拿到七段、卷锁无一次 try 超时 → 10-31「uiTask 拿不到
|
||||
目录条目」的定性被推翻;
|
||||
- 第二行 = 取最大段(idx=6)的段头时拼路径判失败 → 根因在 `wave_store_seg_path()` 返回值
|
||||
契约用反(成功 = 16 字符,读侧按 `!= 0` 判失败),修复见 `App/task/ui_task.c` 两处 `<= 0`。
|
||||
|
||||
复现口令(台架同环境):
|
||||
|
||||
1. `& .venv\Scripts\python.exe .dsh\skills\serial-boot-test\scripts\run_boot_test.py`(烧录 + 启动门禁)
|
||||
2. `& .venv\Scripts\python.exe scripts\board_ui_nav.py --board --to wave_play --i-hold-bench-lock`(走 UI 开页)
|
||||
3. 7003 `LCDMEM` 取帧渲染(本目录四帧的生成方式)
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.8 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.7 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.1 KiB |
Reference in New Issue
Block a user