f5902bcc21
两篇规划期文档改成对当前系统的描述,档名统一去掉"设计说明"的"说明"。 运行与自检记录: - 旧档重写为现状版(10 节:概览 / 记录布局 / 写入路径 / 读取与呈现 / 事件分类 / 控制台日志 / 双端差异 / 内存 / 异常恢复 / 自测要点), 删掉需求表、调研摘要、模块清单动作列、实施步骤与开放问题。 - 按代码纠正:七类记录齐备(原文只写了两类)、自检描述串换成实际 落盘的 28 条、待机阈值以 ui_tokens.h 为准、记录页已走 ui_w_records 共享组件、容量满只删该文件而非整卷清空。 - 待机屏移出本篇:它不属于日志,归 UI 侧;内容页架构补"待机屏 (覆盖层)"一节,产品需求 FR-LOG-3 拆成单纯的上电/重启分类, 待机显示归口已有的 FR-UI-3。 ADC 采样节拍: - §4.5 从 45 行压到 24 行,只留规则 / 违反的代价 / 为什么 / 兜底与 档案指针;九路置换实测表、A/B 对照、探针计数等取证归 ADC_Trap_Records.md 的 TRAP-ADC-01(那里已有完整档案)。 - adc1_gap 字段去掉"2026-10-21 起、此前固件为次数"的修订记录式括号。 - app_main.c 的注释改为指向 TRAP-ADC-01 取证、§4.5 设计口径。 引用同步:两个旧档名全仓替换(含代码注释、角色档、归档 id 表), 旧名残留 0;对 ADC 篇的 § 引用逐条复核落在真实章节上。 验证:48 个提交期钩子全通过,check_doc_links --sections-strict 通过。
74 lines
3.0 KiB
C
74 lines
3.0 KiB
C
/*
|
||
* 模块名称:UI Page SelfTest (自检记录内容页)
|
||
* 模块功能:自检记录叶子节点(node 39)的内容页数据——动态列表,每条记录 2 行
|
||
* (偶数行 = 时间戳、奇数行 = 故障描述),可移选分页;数据经 ui_w_records
|
||
* 注入 reader 取自 sys_log(/log/selftest.log,仅故障才写;本文件不再直接
|
||
* include sys_log.h——task-6 分层收紧);空日志显示单条伪行"无记录";
|
||
* 向框架 ui_content_page 提供页面描述符(零 LVGL 对象)
|
||
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
|
||
* 作者:王建锋
|
||
* 创建日期:2026-09-14
|
||
* 修改记录:
|
||
* v1.0 2026-09-14 王建锋 创建初始版本(设计见 docs/子系统设计/运行与自检记录设计.md §5.2)
|
||
* v1.1 2026-10-20 王建锋 改用 ui_w_records 共享组件(W6:合并两页重复实现)
|
||
* v1.2 2026-10-25 王建锋 记录 reader 注入(道B task-6):不再 include sys_log.h,
|
||
* 数据经组件内注入的 ui_rec_reader_t 取;日志 ID 换
|
||
* 不透明编号 UI_W_REC_LOG_SELFTEST(映射在两端绑定处)
|
||
*/
|
||
|
||
/* 头文件包含区 */
|
||
#include <string.h>
|
||
|
||
#include "ui_page_selftest.h"
|
||
#include "ui_w_records.h"
|
||
|
||
#include "ui_tokens.h"
|
||
|
||
/* 静态变量定义区 */
|
||
|
||
/* 最近读取的记录缓存(偶数行读盘后,奇数行复用;避免同记录重复 I/O) */
|
||
/* 静态变量定义区:见下方 s_rec */
|
||
|
||
/* 函数定义区 */
|
||
|
||
/*
|
||
* 函数功能:总行数(动态;每条记录 2 行,空日志 = 单条伪行"无记录")
|
||
* 入口参数:无
|
||
* 返回值:总行数 uint16_t
|
||
*/
|
||
/*
|
||
* 记录页薄跳板:内容全部走 ui_w_records 共享组件(W6)。
|
||
* 实例 s_rec 携带日志 ID 与**本实例自己的**读盘缓存——两页共用组件代码,
|
||
* 但缓存不得共享,否则切页会命中上一记录号而显示另一页的陈旧行。
|
||
*/
|
||
static ui_w_records_t s_rec = { UI_W_REC_LOG_SELFTEST };
|
||
|
||
static uint16_t pg_count(void) {
|
||
return ui_w_records_count(&s_rec);
|
||
}
|
||
|
||
static void pg_refresh(uint16_t row, char *name, char *value) {
|
||
ui_w_records_refresh(&s_rec, row, name, value);
|
||
}
|
||
|
||
/*
|
||
* 页面描述符(外部链接:生成物 ui_page_registry.c 按菜单树 #page=selftest 绑定引用):
|
||
* 动态列表页——每记录 2 行、UI_LIST_ROWS 行/页 = 4 条/页;band_h=UI_ROW_BAND_H(同 AC/DC
|
||
* 约定:selectable 页选中行黑字必须配白带,band_h=0 会致选中行不可见);
|
||
* 时间戳 19 ASCII ≈114px < 屏宽可容
|
||
*/
|
||
const content_page_def_t ui_page_selftest_desc = {
|
||
.id = "selftest",
|
||
.title = "自检记录",
|
||
.selectable = 1u,
|
||
.top_y = UI_LIST_TOP,
|
||
.pitch = UI_ROW_PITCH,
|
||
.band_h = UI_ROW_BAND_H,
|
||
.text_dy = 0,
|
||
.left_x = UI_LIST_LEFT_X,
|
||
.right_x = UI_LIST_RIGHT_X,
|
||
.rows_per_page = UI_LIST_ROWS,
|
||
.count_cb = pg_count,
|
||
.refresh = pg_refresh,
|
||
};
|