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
+26
View File
@@ -30,6 +30,11 @@
* ui_page_registry.c(菜单树 #page= 注记为唯一真源),
* 逻辑层手写 menu_content_page_for() 随之删除;
* 描述符新增 id 字段(ASCII 页名,供日志/诊断定位是哪一页)
* 2026-11-13 DTU 项目组 实时页自动刷新:描述符新增 auto_ms/auto_seq 两字段,
* 新 API ui_content_page_auto_poll——框架在页面打开期间持
* 一只轮询定时器,发布序号变过才整页失效,数据没变零重绘;
* 页面模块不再各自造定时器(周期账见 ui_page_ac.c 的
* AC_AUTO_MS 注与 UI_数据供给设计说明.md §5.4)
*/
#ifndef UI_CONTENT_PAGE_H
#define UI_CONTENT_PAGE_H
@@ -80,6 +85,15 @@ typedef struct {
uint16_t (*count_cb)(void); /* 动态行数(记录页) */
void (*draw_cb)(lv_layer_t *layer, const lv_area_t *clip); /* 表单/操作页:自定义内容 */
bool (*key_cb)(lv_key_t key); /* 页面自有键;true = 页已处理 */
/* —— 自动失效轮询(全可选;auto_ms=0 = 只在按键重绘,未订阅页行为逐位不变)——
* auto_ms>0:本页打开期间框架持一只 lv_timer(周期 auto_ms ms,uiTask 上下文随
* lv_timer_handler 走),每拍取发布序号(auto_seq(),NULL = ui_data_rt_seq()
* 即通道一),序号与上一拍不同才整页失效——取数门控仍是页面 refresh 里的
* seq 判断(UI_数据供给设计说明.md §5.4 的页面私有缓存约定原样有效)。
* 关页即销定时器;页面模块禁止自造定时器。周期取值账见 ui_page_ac.c 的
* AC_AUTO_MS 注释(发布者 rt 每 200ms 一帧,见同文 §5.2)。 */
uint16_t auto_ms; /* 轮询周期(ms);0 = 不启用自动刷新 */
uint32_t (*auto_seq)(void); /* 新鲜度序号源;NULL = ui_data_rt_seq() */
} content_page_def_t;
/*
@@ -154,4 +168,16 @@ bool ui_content_page_is_editable(void);
*/
uint16_t ui_content_page_selected_row(void);
/*
* 函数功能:自动刷新轮询一拍(生产由框架定时器回调调用;无头模拟器 --rtlive 自检
* 没有定时器节拍、直调本函数顶替——两个入口共用同一份判定,规则不会两套)
* 入口参数:无
* 返回值:无
* 限定条件:uiTask 上下文(lv_timer_handler 内或其等价串行点)
* 函数说明:1. 无页打开 / 本页 auto_ms=0:空操作;
* 2. 序号与上一拍相同:不失效——数据没变的一次整屏重绘是纯支出(屏带宽/功耗);
* 3. 序号变了:记下新基准并整页失效,真正取数仍走页面 refresh 的 seq 门控
*/
void ui_content_page_auto_poll(void);
#endif /* UI_CONTENT_PAGE_H */