Correct the overlay cause: the log order rules the sector-cache overwrite out

The flash probe records every transaction in order and the last one for that launch is the app's own code load (addr=103000 len=544, first bytes f0b583b0); nothing follows before the app is gone, so no font or resource read lands on the running app in that window. The 7848 font-region reads in the log belong to the firmware's own repainting.

What stands measured: the loader copies and jumps (a PC sample lands in the overlay, and a 16-byte app that calls nothing loops there forever); the app dies well under 100 ms (panel reads at t+113 ms still show the menu, at t+193 ms only the launcher's title box); an app that spins first survives a bar, a blit and led and dies around delay_ms; one that calls blit immediately is gone before it can be seen. Next: drop the PC probe interval from 100 ms to a couple of milliseconds, which is a one-line model change and turns it into a real trace of the app's short life.
This commit is contained in:
mckero committed 2026-10-02 10:08:40 +08:00
1 parent e9c344b52a
commit 394f473df0
2 files changed
+34

No files matched your search

+15
View File
@@ -627,6 +627,21 @@ app 区被读过 —— 而多系统菜单读的是**固件槽**,不是应用
下一步:在固件的 flash 驱动里找到这道门(一个内存标志、一个寄存器、还是一根 GPIO),再看模型在被问到时答的是什么。
这是第一次,这个故障有了名字、也有了三个应用的可复现对照。
**更正:扇区缓存这条解释,与日志的时间顺序不符。**
flash 探针是按顺序记录每一笔事务的,而那一次启动的**最后一笔**正是应用自己的代码加载
(addr=103000 len=544,首字节 f0b583b0)。此后到应用消失为止**没有任何事务** —— 也就是说,在那个窗口里
**没有**字库或资源读取压在运行中的应用头上,**扇区缓存被覆盖在这里不可能是原因**。日志真正显示的是:整个会话里
有 7848 次字体区读取,它们都属于固件自己重绘画面的过程,而不属于应用的生命期。
于是搜索范围收敛到(只列实测过的):加载器会拷贝并跳转(有采样落在叠加区内,而且那个 16 字节、什么都不
调用的应用能在里面永远循环);应用随后在**远不到 100 ms** 内死亡(t+113 ms 读屏还是菜单,t+193 ms 只剩启动器
的标题框);先自旋再动作的应用能活过一条横杠 + blit + led,而在 delay_ms 附近死掉;一上来就调 blit 的应用
则连影子都还没留下就没了。**凶手在这最初的一百毫秒之内,而且不是 flash 读取。**
下一个仪器,只需要改模型一行而不是继续猜:PC 探针每 100 ms 采样一次,而应用整个生命期就是这个量级。把这个
间隔降到几毫秒,它就变成真正的 trace,能看出应用**停在叠加区的哪个位置**。
## 键盘:两个真 bug,都已修复
这里原来的笔记写的是"按键到达了固件但界面不反应",并且归咎于机器模型。结果发现有**两个