fix(ui/wave): 回放页段表枚举恒空根因修复(seg_path 返回值判错 + 键处理缺重绘) #67
Reference in New Issue
Block a user
Delete Branch "fix-replay-enum-0e52b1963afa"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This is by an automated agent, not a human.
修 #38 §5 阻塞缺陷「回放页段表枚举恒空」:真机开回放页恒显「无录波段」,而同一时刻
FTP
LIST /wave段文件全在、RETR/DELE正常。根因(10-31 的定性被板级 FR 埋点推翻)
埋点构建上板后串口实录(2026-11-02 17:49):
cnt=7 np=0 tt=0说明目录枚举与卷锁一直正常(10-31 判的「uiTask 拿不到目录条目」不成立)。真正坏的是取段:
wave_store_seg_path()的契约是「>=0 = 写入字符数(本形态恒16),失败才是负码」(
App/algo/wave_store.h),而读侧ui_task_wave_load_head()与ui_task_wave_seg_win()从功能建成起写成!= 0判失败——每次成功都被判死,f_open永远走不到,盘上有段也恒显「无录波段」。写侧default_task.c用同一函数但写<= 0,一直正确;模拟器走假s_wave_ops桩、不编译读路径,所以黄金参考图与三组主机单测从未覆盖到这条链。
修复过程中另暴露同页第二缺陷:
ui_page_wave_play.c的pg_key()接管控件键后从未调ui_content_page_invalidate(),框架只在 key_cb 返回 false 时替页失效——真机按键送达、s_idx/s_ch已变、帧字节完全不变(同帧 SHA-256),切道切段屏上纹丝不动。被枚举缺陷完全遮住(整页恒空、没有可切的画面),随本次修复首次上板才暴露。
改动(5 个提交)
ee002d7eui_task_wave_scan()失败不再无条件钉s_wave_scanned=1(卷忙/失败不再钉成假「0 段」空态),失败分支带 FR 码留痕3e01e9d9#N序号、try 闸计数、完成行无条件打印、head/win 失败带 FR 码)——已随根因修复收敛删除d6253aa9wave_store_seg_path()判据改<= 0(与写侧同口径);「表列着、开档失败」补永久 FR 留痕;临时诊断收敛04609791ui_content_page_invalidate()(与已接管键的页面同纪律);切段失败仍「按了没动」不重绘364b1636Before / After(同台架、同 APP、同 4× 放大取帧,仅固件不同)
7efa58d9构建(身份戳Nov 2 2026 14:21:24)修复后补充两帧证明段表与键处理都活了(同分支固件):
l)d)开屏 =
UA SEC6 M、Pk=−1423 mV;切段 =UA SEC5 M、Pk=1744 mV;切道 =UB SEC5 M、右上「削」徽标、Pk=843 mV。至此回放页「真段 / 坏段 / 空态」三态都有测试面,第二幕
到场轮的坏段画面判据可跑。
验证
/keil-build:0 错误 0 警告(Code 247,284 → 247,288 B,RAM 不变);台账 / 同码凭证 /数字回填同批刷新。
READBACK: OK (no difference found)+启动门禁
VERDICT: PASS;回放页真段显示、切段、切道全部实测(上面四帧)。92%、doc-links 等)在最终提交上通过;
check_doc_links.py --all通过。PR 无关);本 PR 未新增失败面,详见构建日志。
说明
登记簿条目按「完成即销项」删除,完整证据链落进设计说明 §10。
们背书。
FR 埋点构建上板判读(本 boot 串口实录,临时诊断构建 = 上一提交): [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): 10-31「唯独 ui_task_wave_scan 拿不到目录条目」的定性被推翻。 - 真正坏的在 load_head / seg_win 的拼路径判错:契约 (App/algo/wave_store.h:458)是「成功 = 写入字符数(本形态恒 16), 失败才是负码」,读侧自建成功能起写成 != 0 判失败——每次成功都被 判死,f_open 永远走不到,盘上有段也恒显「无录波段」。写侧 default_task.c 同函数用 <= 0,一直是对的,所以「FTP 六段全见、 写侧枚举正常、唯独回放恒空」的怪象全线得解。 - 模拟器走桩、不编译本文件读侧,黄金参考图与主机单测因此从未覆盖 这条链,此病从建成存活至今(板端首张真机波形图见 PR #67)。 - 两处口径改 <= 0(与写侧一致);表列着的段 f_open 失败补带 FR 码 的永久留痕——该失败态页面无视觉面,10-31 误定性的教训就是静默。 - 临时诊断(#N 序号 / try 闸日志 / 无条件 done 行)收敛删除,留 最小永久集:scan opendir/readdir FR、零条目 INFO、head/win 开档 失败 FR。try 闸恢复静默(看门狗设计说明 §4.3 口径)。 - /keil-build 0 错误 0 警告:Code 247,284 B(较临时诊断构建 −368 B,较修复前 +236 B),RAM 不变;台账 / 同码凭证 / 数字回填 同批刷新。 Refs #3877606ebffcto364b163663fix(ui/wave): 回放页枚举扫描失败不再钉「无段」缓存并补 FR 码留痕to fix(ui/wave): 回放页段表枚举恒空根因修复(seg_path 返回值判错 + 键处理缺重绘)@super_agent_bot 坏段/空态画面的真机拍摄、注量对表仍需到场轮(第二幕),本 PR 只打开测试面,不替它
们背书,创建新的工单,放到待办中
好的:将创建「第二幕:真机拍摄坏段/空态画面 + 注量对表」的到场轮工单,并放到待办中。
This is by an automated agent, not a human.
工单已创建并放到待办:#68 故障录波到场轮第二幕:注量对表 + 坏段/空态画面真机拍摄(看板无「待办」列,按仓库口径用「排队」列 = 待办;标签已打,card-sync 摘要:created 1 / moved 0 / kept 0 → 排队列)。判据与完成条件按手册第二幕 §4 写明,关联 #38;到场时对本仓库 agent 会话说「按故障录波到场轮手册,先做第二幕」即可开跑。
新工单已建好:#68 故障录波到场轮第二幕:注量对表 + 坏段/空态画面真机拍摄,已放入「排队」(看板没有「待办」列,「排队」对应待办口径),判据与到场条件按故障录波执行手册第二幕写明。