UI 内容页框架加实时页自动刷新机制(交流量页启用,300ms)

- ui_content_page:描述符尾部追加 auto_ms/auto_seq 可选字段(缺省=0/NULL=
  旧行为逐位不变);页打开期间框架持一只 lv_timer,仅当发布序号变过才整页
  失效(零空转失效),关页即销;新 API ui_content_page_auto_poll
- ui_page_ac.c:.auto_ms=300(≥200ms 发布节拍、避 400=2×200 锁相、300=
  15×20ms LVGL 整刷周期;最坏屏上滞后 500ms;完整取值账目在代码注释)
- simulator:rt 帧装配收口 sim_fill_rt_frame(n=0 冻结帧保 74 张黄金逐字节
  一致,n≥1 确定性斜坡);新增 --rtlive 两态自检 + 窗口模式 200ms 节拍发布;
  check_content_pages.py 增 [rtlive] 零按键 A≠B 落屏断言
- docs/UI设计:供给说明新增 §5.5 自动刷新口径;内容页架构 §3.1/§四/§九 同步
  (并修正 s_open 判定旧描述)
- 台账:Keil 构建后按固定顺序回填(Code=256,588 / RW_IRAM1 +8B / UI +8B)

验证:模拟器 0错0警;菜单 8 状态 + 内容页 74 张 + rtlive(A≠B 30 字节)PASS
(lead 独立复跑 RC=0);Keil 0错0警;mem-budget --gate / mem-numbers --scan 绿。
This commit is contained in:
2026-11-13 14:23:06 +08:00
parent 5bab248dee
commit a5142c6d9d
11 changed files with 384 additions and 105 deletions
+16
View File
@@ -50,6 +50,19 @@
#define AC_Q_BAD (UI_DATA_Q_IV | UI_DATA_Q_NT | UI_DATA_Q_RAW | UI_DATA_Q_SB | \
UI_DATA_Q_BL | UI_DATA_Q_OV)
/* 自动刷新轮询周期(ms;框架级机制,字段语义见 ui_content_page.h 的 auto_ms 注)。
* 取 300 的账(允许区间 250~500;发布者 rt 通道每 200ms 一帧,见
* UI_数据供给设计说明.md §5.2):
* ① 必须 ≥ 发布节拍 200ms——轮得比发得快只是空转,白耗 uiTask;
* ② 避开 400ms(恰为 2×200):采样拍与发布拍锁相,感知滞后最坏 800ms;
* ③ 300 = 15 × LVGL 刷新周期 20ms(LV_DEF_REFR_PERIOD 两端同值):失效恰好落进
* 下一次整刷合并,不多触发一帧;最坏屏上滞后 = 200 + 300 = 500ms,对一周波
* 相量级的电气量读数足够,读表不觉得卡;
* ④ 250 只比 300 早至多 50ms(新帧首先受发布节拍约束),代价是多 20% 空转拍;
* 500 最坏滞后升到 700ms,数值跳变看着像"翻页"。
* 稳态开销为零:序号没变不失效不重绘(ui_content_page_auto_poll 纪律)。 */
#define AC_AUTO_MS 300u
/* 静态变量定义区 */
/* 行名表(Flash) */
@@ -228,4 +241,7 @@ const content_page_def_t ui_page_ac_desc = {
.rows = NULL,
.init_cb = ac_init,
.refresh = ac_refresh,
/* 自动刷新(task-2):框架轮询通道一发布序号,来新帧才整页失效——本页不自造
* 定时器;auto_seq 缺省 = ui_data_rt_seq(),与 ac_frame_ready 的取数门控同源。 */
.auto_ms = AC_AUTO_MS,
};