From 5bab248deeac14b0d6235e0fe312bcd9388a5e0a Mon Sep 17 00:00:00 2001 From: Wanderingss <1624155937@qq.com> Date: Fri, 13 Nov 2026 13:11:42 +0800 Subject: [PATCH] =?UTF-8?q?UI=20=E5=BE=85=E6=9C=BA=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E9=A1=B5=E6=8E=A5=E5=85=A5=20UA/UB/UC/IA/IB/IC=20=E5=85=AD?= =?UTF-8?q?=E8=B7=AF=E5=AE=9E=E6=97=B6=E5=80=BC=EF=BC=88v1.1=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ui_standby.c:v1 占位(6 行恒 0.00A)→ ui_data 通道一按 seq 门控取帧, yc 语义下标 {0,1,2,4,5,6}(跳 UN/IN);无首帧/坏质显 --;定点格式化复用 ui_w_editor_fmt_scaled;单位随 eng(引脚档不挂),口径逐字对齐 ui_page_ac.c - ui_standby.h:头注与修改记录同步 - 文档 §5.2 按新口径改写;§1 R2 改为新需求口径(不再引 mockup);§9 对应 开放问题销项删行;版本 v1.4 验证:模拟器 0 错 0 警 + 菜单行/内容页/编码规范门禁 PASS + Keil 0 错 0 警; --standby 截图双分支实证(UA/IA 显值、UB/UC/IB/IC 显 --)。 --- Drivers/BSP/UI/ui_standby.c | 131 ++++++++++++++++++++-- Drivers/BSP/UI/ui_standby.h | 4 +- docs/内存管理/RAM使用分析与优化方案.md | 6 +- docs/内存管理/RAM预算台账.md | 6 +- docs/子系统设计/运行与自检记录设计说明.md | 28 +++-- scripts/ram_baseline.tsv | 2 +- scripts/size_attestation.json | 22 ++-- 7 files changed, 157 insertions(+), 42 deletions(-) diff --git a/Drivers/BSP/UI/ui_standby.c b/Drivers/BSP/UI/ui_standby.c index 0cd42d20..a175d044 100644 --- a/Drivers/BSP/UI/ui_standby.c +++ b/Drivers/BSP/UI/ui_standby.c @@ -1,6 +1,7 @@ /* * 模块名称:UI Standby (待机显示页) - * 模块功能:长时间无按键操作时自动切入的默认界面(6 路电流值 + 分隔线 + 底部时钟); + * 模块功能:长时间无按键操作时自动切入的默认界面(UA/UB/UC/IA/IB/IC 六路实时值 + 分隔线 + 底部时钟); + * 数值经 ui_data 通道一实时帧 yc[](App 层装配,本文件零 App include),口径同 ui_page_ac.c; * 屏幕覆盖层模式——进入保存前屏与焦点、ENTER(确认键)还原,其余键忽略; * 空闲检测 = lv_timer(1s 周期),活动通知由菜单/内容页键事件挂钩 * 适用平台:STM32F407ZGTx / PC 模拟器(两端共用) @@ -8,6 +9,9 @@ * 创建日期:2026-09-14 * 修改记录: * v1.0 2026-09-14 王建锋 创建初始版本(设计见 docs/子系统设计/运行与自检记录设计说明.md §5.2) + * v1.1 2026-11-13 DTU 项目组 v1 占位(6 行电流恒 0.00A)→ UA/UB/UC/IA/IB/IC 实时值: + * ui_data 通道一按 seq 门控取帧;无首帧/坏质显 "--";定点 + * 格式化复用 ui_w_editor_fmt_scaled;单位随 eng(引脚档不挂) */ /* 头文件包含区 */ @@ -16,9 +20,11 @@ #include "ui_standby.h" #include "lvgl.h" +#include "ui_data.h" #include "ui_menu_view.h" #include "ui_style.h" #include "ui_tokens.h" +#include "ui_w_editor.h" #define DBG_TAG "[UI_STANDBY]" #include "dbg_log.h" @@ -27,24 +33,40 @@ /* * 布局常量(设备像素;参考 mockups/待机显示页面.jpg): - * 屏幕宽高取令牌 UI_SCREEN_W/H;6 路电流值行自 y=28 起、行距 18 + * 屏幕宽高取令牌 UI_SCREEN_W/H;六路实时值行自 y=28 起、行距 18 * (末行 y=118..130);分隔线 y=132;底部时钟 y=140 居中 */ -#define SB_CH_COUNT 6u /* 电流通道数 */ +#define SB_CH_COUNT 6u /* 显示通道数(六路主要电力量;yc 下标见 s_ch_yc) */ #define SB_ROW_Y0 28 /* 首数据行顶 y */ #define SB_PITCH 18 /* 行距(相邻行槽顶间距) */ -#define SB_LABEL_X 24 /* 通道名 x(Ib/Ic/...) */ +#define SB_LABEL_X 24 /* 通道名 x(UA/UB/UC/IA/IB/IC) */ #define SB_EQ_X 72 /* "=" 号 x */ -#define SB_VALUE_X 96 /* 数值 x(0.00A;v1 占位,待交流量标定管线接入实时值) */ +#define SB_VALUE_X 96 /* 数值 x(数字+单位 或 "--") */ + +/* 值串缓冲长度:最坏 "2147483.647V" = 12 + NUL,取 16 留余量 */ +#define SB_VAL_BUF_LEN 16u +#define SB_INVALID "--" /* 空值串(同交流量页 AC_INVALID) */ +#define SB_DECIMALS 3u /* 电压/电流小数位(同交流量页 AC_IA_DECIMALS) */ +/* 不可信品质合集:无效 / 未攒满一周波 / 透传码值 / 自检异常 / 闭锁 / 越程 + * (逐字同 ui_page_ac.c 的 AC_Q_BAD——两处判据不可能漂移) */ +#define SB_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) #define SB_LINE_Y 132 /* 分隔线 y(高 1px) */ #define SB_TIME_Y 140 /* 底部时钟放置 y(居中) */ /* 静态变量定义区 */ -/* 通道名与占位数值(Flash;全 ASCII,无需中文字形) */ -static const char *const s_ch_name[SB_CH_COUNT] = { "Ib", "Ic", "Io", "Ia2", "Ib2", "Ic2" }; -static const char *const s_ch_value[SB_CH_COUNT] = { "0.00A", "0.00A", "0.00A", "0.00A", "0.00A", "0.00A" }; +/* 通道名表 + yc[] 语义下标映射(Flash;全 ASCII,无需中文字形)。 + * 下标 = adc_semantic_t 序(UA/UB/UC/UN/IA/IB/IC/IN/TEMP):跳过 UN(3)/IN(7)—— + * 用户点名显示六路(2026-11-13),且 UN 本台架永久无数据,摆一排恒 "--" 的假通道 + * 不如不摆(取舍逻辑同交流量页只显 Ua/U0/Ia,docs/UI设计/页面扩充详细方案.md §3.1.1) */ +static const char *const s_ch_name[SB_CH_COUNT] = { "UA", "UB", "UC", "IA", "IB", "IC" }; +static const uint8_t s_ch_yc[SB_CH_COUNT] = { 0u, 1u, 2u, 4u, 5u, 6u }; + +/* 帧缓存:发布序号变化才整帧拷一次(页面侧约定 = ui_data.h 头注 / UI_数据供给设计说明.md §5.4) */ +static ui_data_rt_t s_rt; +static uint32_t s_seq; static lv_obj_t *s_scr; /* 待机屏(init 时建、常驻不销毁) */ static lv_obj_t *s_cont; /* 全屏容器(焦点/键入口 + 自绘载体,无子对象) */ @@ -75,6 +97,85 @@ static bool sb_areas_intersect(const lv_area_t *a, const lv_area_t *b) { return (x1 <= x2 && y1 <= y2); } +/* + * 函数功能:把常量值串安全搬进显示缓冲(替代 strcpy,规范 7.5;同 ui_page_ac.c 的 ac_put) + * 入口参数:a_dst - 目标缓冲(SB_VAL_BUF_LEN) char * + * a_lit - 源字面量(编译期串,长度由宏用 sizeof 算好) const char * + * a_len - 需拷贝字节数(不含 NUL) uint32_t + * 返回值:无 + * 限定条件:a_dst/a_lit 非 NULL;a_len 超缓冲时截断而不是越界 + */ +static void sb_put(char *a_dst, const char *a_lit, uint32_t a_len) { + if (a_len > (SB_VAL_BUF_LEN - 1u)) { + a_len = SB_VAL_BUF_LEN - 1u; + } + (void)memcpy(a_dst, a_lit, a_len); + a_dst[a_len] = (char)0; +} + +/* 值串落屏统一走这里:长度由 sizeof 在调用点算,改串不会漏改长度 */ +#define SB_PUT(a_dst, a_lit) sb_put((a_dst), (a_lit), (uint32_t)(sizeof(a_lit) - 1u)) + +/* + * 函数功能:取用最新实时帧(只在发布序号变化时整帧拷)——读法同 ui_page_ac.c 的 ac_frame_ready + * 入口参数:无 + * 返回值:1 - 有可用帧;0 - 首帧未到或本帧无效 uint8_t + * 限定条件:UI 任务绘制上下文 + * 函数说明:读失败(首帧未到)时清缓存并记住本次序号,避免每次重绘重复尝试;下一帧序号 + * 必然变化 → 自动恢复。待机 1s 定时器整屏 invalidate 就是数值刷新节拍,不新增定时器 + */ +static uint8_t sb_frame_ready(void) { + uint32_t now = ui_data_rt_seq(); + + if (now != s_seq) { + s_seq = now; + if (ui_data_rt(&s_rt) != 0) { + (void)memset(&s_rt, 0, sizeof(s_rt)); + return 0u; + } + } + return (s_rt.valid != 0u) ? 1u : 0u; +} + +/* + * 函数功能:拼一行值串(数字 + 单位,或 "--") + * 入口参数:a_idx - 显示行下标 0..5 uint32_t + * a_buf - 输出缓冲 char * + * a_len - 缓冲容量(含 NUL) uint32_t + * 返回值:无 + * 限定条件:UI 任务绘制上下文 + * 函数说明:口径同 ui_page_ac.c——无首帧或品质带 SB_Q_BAD 一律 "--"("有数但不可信"与 + * "没有数"同形);数字走共享定点格式化 ui_w_editor_fmt_scaled(3 位小数 = + * 10^3 定点,负值钳 0 交给品质位解释),页面侧不引 %f 软浮点打印。单位随 eng: + * 二次/一次值档 UA/UB/UC 挂 "V"、IA/IB/IC 挂 "A";ENG_PIN 档不挂单位——引脚档 + * 数字是 ADC 引脚电压而非端子电流量,挂单位就是替用户完成没做的换算(交流量页 + * 同档另设量纲口径行标注,待机屏无第 7 行可标,故数字照显、单位缺席) + */ +static void sb_value_str(uint32_t a_idx, char *a_buf, uint32_t a_len) { + const ui_data_yc_t *p; + uint32_t n; + + if ((a_idx >= SB_CH_COUNT) || (sb_frame_ready() == 0u) || + (s_ch_yc[a_idx] >= (uint8_t)UI_DATA_YC_N)) { + SB_PUT(a_buf, SB_INVALID); + return; + } + p = &s_rt.yc[s_ch_yc[a_idx]]; + if ((p->qds & (uint8_t)SB_Q_BAD) != 0u) { + SB_PUT(a_buf, SB_INVALID); + return; + } + ui_w_editor_fmt_scaled((p->val > 0.0f) ? (int32_t)((p->val * 1000.0f) + 0.5f) : 0, + SB_DECIMALS, a_buf, a_len); + if (s_rt.eng != (uint8_t)UI_DATA_ENG_PIN) { + n = (uint32_t)strlen(a_buf); + if ((n + 1u) < a_len) { + a_buf[n] = (a_idx < 3u) ? 'V' : 'A'; + a_buf[n + 1u] = (char)0; + } + } +} + /* * 函数功能:绘制居中单行文本(底部时钟) * 入口参数:layer - 绘制层 lv_layer_t * @@ -100,11 +201,12 @@ static void sb_draw_centered_text(lv_layer_t *layer, const char *text, int32_t y } /* - * 函数功能:待机屏自绘(6 路电流值 + 分隔线 + 底部时钟;逐行 culling) + * 函数功能:待机屏自绘(六路实时值 + 分隔线 + 底部时钟;逐行 culling) * 入口参数:e - 事件指针 lv_event_t * * 返回值:无 * 限定条件:事件为 LV_EVENT_DRAW_MAIN,待机模块已初始化 - * 函数说明:1bpp 极性 white=暗墨——文本/分隔线均白色;数值 v1 占位 0.00A + * 函数说明:1bpp 极性 white=暗墨——文本/分隔线均白色;数值逐行现拼(sb_value_str), + * 待机 1s invalidate 即数值刷新节拍 */ static void sb_draw_cb(lv_event_t *e) { lv_layer_t *layer = lv_event_get_layer(e); @@ -113,6 +215,7 @@ static void sb_draw_cb(lv_event_t *e) { int32_t row_y = SB_ROW_Y0 + (int32_t)i * SB_PITCH; lv_area_t strip; lv_draw_label_dsc_t ld; + char vb[SB_VAL_BUF_LEN]; strip.x1 = 0; strip.x2 = UI_SCREEN_W - 1; @@ -142,8 +245,8 @@ static void sb_draw_cb(lv_event_t *e) { lv_draw_label_dsc_init(&ld); ld.base.layer = layer; - ld.text = s_ch_value[i]; - ld.text_static = 1; + sb_value_str(i, vb, (uint32_t)sizeof(vb)); /* 栈缓冲同帧有效(同底部时钟 ts 模式) */ + ld.text = vb; ld.color = UI_COL_FG; ld.ofs_x = SB_VALUE_X; ld.ofs_y = 0; @@ -197,6 +300,10 @@ static void sb_enter(void) { if (s_active || s_scr == NULL) { return; } + /* 进入即复位帧缓存(同交流量页 ac_init 开页复位理由:不沿用上次的陈旧帧号, + * 强制下一次绘制重取最新帧) */ + s_seq = 0u; + (void)memset(&s_rt, 0, sizeof(s_rt)); s_prev_scr = lv_screen_active(); g = lv_group_get_default(); s_prev_focus = (g != NULL) ? lv_group_get_focused(g) : NULL; diff --git a/Drivers/BSP/UI/ui_standby.h b/Drivers/BSP/UI/ui_standby.h index 0417516d..6128fda4 100644 --- a/Drivers/BSP/UI/ui_standby.h +++ b/Drivers/BSP/UI/ui_standby.h @@ -1,6 +1,7 @@ /* * 模块名称:UI Standby (待机显示页) - * 模块功能:长时间无按键操作时自动切入的默认界面(6 路电流值 + 分隔线 + 底部时钟); + * 模块功能:长时间无按键操作时自动切入的默认界面(UA/UB/UC/IA/IB/IC 六路实时值 + 分隔线 + 底部时钟); + * 数值经 ui_data 通道一实时帧 yc[](口径同 ui_page_ac.c); * 屏幕覆盖层模式——进入保存前屏与焦点、ENTER(确认键)还原,其余键忽略; * 空闲检测 = lv_timer(1s 周期),活动通知由菜单/内容页键事件挂钩 * 适用平台:STM32F407ZGTx / PC 模拟器(两端共用) @@ -8,6 +9,7 @@ * 创建日期:2026-09-14 * 修改记录: * v1.0 2026-09-14 王建锋 创建初始版本(设计见 docs/子系统设计/运行与自检记录设计说明.md §5.2) + * v1.1 2026-11-13 DTU 项目组 6 路电流占位 → UA/UB/UC/IA/IB/IC 实时值(口径同 ui_page_ac.c) */ #ifndef UI_STANDBY_H diff --git a/docs/内存管理/RAM使用分析与优化方案.md b/docs/内存管理/RAM使用分析与优化方案.md index 011494a0..bb94a8a0 100644 --- a/docs/内存管理/RAM使用分析与优化方案.md +++ b/docs/内存管理/RAM使用分析与优化方案.md @@ -47,10 +47,10 @@ dhara 失败类 +84;RO 另 +208,全是该失败类名表)→ `ER_IROM1` | 区域 | 用量 | 容量 | 占比 | |---|---|---|---| -| ER_IROM1 | 287,964 B (281.21 KB) | 1,048,576 B (1024 KB) | 27.5% | -| RW_IRAM1 | 97,024 B (94.75 KB) | 131,072 B (128 KB) | 74.0% | +| ER_IROM1 | 288,148 B (281.39 KB) | 1,048,576 B (1024 KB) | 27.5% | +| RW_IRAM1 | 97,240 B (94.96 KB) | 131,072 B (128 KB) | 74.2% | | RW_CCM | 57,376 B (56.03 KB) | 65,280 B (64 KB) | 87.9% | -| **Flash (ROM 合计)** | **290,044 B (283.2 KB)** | 1,048,576 B (1024 KB) | **27.7%** | +| **Flash (ROM 合计)** | **290,228 B (283.4 KB)** | 1,048,576 B (1024 KB) | **27.7%** | 各区的容量与常量来源: diff --git a/docs/内存管理/RAM预算台账.md b/docs/内存管理/RAM预算台账.md index e9b0430b..042cf628 100644 --- a/docs/内存管理/RAM预算台账.md +++ b/docs/内存管理/RAM预算台账.md @@ -15,16 +15,16 @@ | 区域 | 用量 | 容量 | 占比 | 门禁(≤92%) | |---|---|---|---|---| -| ER_IROM1 (Flash) | 287,964 B | 1,048,576 B | 27.5% | 参考 | +| ER_IROM1 (Flash) | 288,148 B | 1,048,576 B | 27.5% | 参考 | | RW_CCM | 57,376 B | 65,280 B | 87.9% | PASS | | UNINIT_CCM | 48 B | 256 B | 18.8% | 参考 | -| RW_IRAM1 | 97,024 B | 131,072 B | 74.0% | PASS | +| RW_IRAM1 | 97,240 B | 131,072 B | 74.2% | PASS | | 子系统(静态 RW+ZI;除 RTOS 堆在 CCM 外均在 SRAM1) | 现值 | 配额 | 状态 | |---|---|---|---| | 网络 | 13,958 B | 12 KB | ⚠ 超 1.6 KB | | 存储 | 9,144 B | 12 KB | OK | -| UI | 36,511 B | 16 KB | ⚠ 超 19.7 KB | +| UI | 36,723 B | 16 KB | ⚠ 超 19.9 KB | | RTOS 堆 | 57,376 B | 56 KB | 堆=配额 | | 应用 | 26,609 B | 8 KB | ⚠ 超 18.0 KB | | 其它 | 10,792 B | — | 参考 | diff --git a/docs/子系统设计/运行与自检记录设计说明.md b/docs/子系统设计/运行与自检记录设计说明.md index e42c7a64..8183b410 100644 --- a/docs/子系统设计/运行与自检记录设计说明.md +++ b/docs/子系统设计/运行与自检记录设计说明.md @@ -1,7 +1,7 @@ # 运行/自检记录与待机显示设计说明 -> **版本**:v1.3(§4.4 新增"卷锁 fail-open 边沿补投自检记录"一条,道G task-40;v1.2 为 §4.3 随七类记录更新,v1.1 的原始设计口径不变) -> **日期**:2026-09-14(v1.2 更新 2026-10-26) +> **版本**:v1.4(2026-11-13:§5.2 待机屏从 6 路占位电流改为 UA/UB/UC/IA/IB/IC 六路实时值,§1 R2 按新口径改写、不再引 mockup,§9 对应开放问题销项删行;v1.3 为 §4.4 新增"卷锁 fail-open 边沿补投自检记录"一条,道G task-40;v1.2 为 §4.3 随七类记录更新,v1.1 的原始设计口径不变) +> **日期**:2026-09-14(v1.2 更新 2026-10-26,v1.4 更新 2026-11-13) > **状态**:步骤 1–9 全部完成——双端构建 0/0、`--logtest` PASS、ui-verify 五门禁全绿;真机 /serial-boot-test 待上电回归(§8.2) > **关联文档**:`项目架构总览.md` · `STM32F4-Base存储架构说明.md` · `系统墙钟时间维护说明.md` · `UI设计/内容页架构.md`(如存在)· `docs/UI设计/mockups/`(待机显示页面.jpg / 运行记录页.jpg / 自检记录页.jpg / 密码页面实际机器的示例图片.jpg) @@ -10,7 +10,7 @@ | # | 需求 | 说明 | |---|------|------| | R1 | 密码错误提示 | 用户密钥页输错密码时提示"密码输入错误",并允许重新输入(现状:仅清空重输、无提示) | -| R2 | 待机显示页 | 长时间无操作时默认显示的界面(参考 `mockups/待机显示页面.jpg`:6 路电流值 + 底部时钟);**只有按确认键才进入菜单** | +| R2 | 待机显示页 | 长时间无操作时默认显示的界面:UA/UB/UC/IA/IB/IC 六路电量的实时值 + 底部时钟;**只有按确认键才进入菜单** | | R3 | 运行记录页 | 记录装置上电时间、重启时间(参考 `mockups/运行记录页.jpg`:标题 + 逐条"时间戳 + 事件" + 页脚分页) | | R4 | 自检记录页 | 记录开机自检结果,有问题才记录(参考 `mockups/自检记录页.jpg`) | | R5 | FTP 可读存储 | 记录以**纯文本文件**落盘,FTP(根目录 = FatFS 卷根)可直接下载读取 | @@ -225,19 +225,26 @@ int syslog_get_record(syslog_id_t id, uint32_t idx, char *ts, size_t ts_len - 空闲检测 = `lv_timer`(1s 周期,MCU/模拟器均经 `lv_timer_handler` 驱动,无 OS 依赖); - 活动通知挂钩:`menu_key_cb`、`cp_key_cb` 每收到一个键调 `ui_standby_notify_activity()`(重置计时)。 -**待机屏内容**(参考 mockup,全 ASCII 无需新字体字): +**待机屏内容**(v1.1 起显示实时值,2026-11-13;全 ASCII 无需新字体字): ``` -Ib = 0.00A ← 6 行电流值(v1 占位 0.00A,与 AC/DC 页现状一致; -Ic = 0.00A 待交流量标定管线落地后接 TPAFE5160 实时值) -Io = 0.00A -Ia2 = 0.00A -Ib2 = 0.00A -Ic2 = 0.00A +UA = 0.341 ← 6 行实时值 = ui_data 通道一 yc[](下标 = adc_semantic_t 语义序: +UB = 0.338 UA/UB/UC = 0..2,IA/IB/IC = 4..6;UN/IN 不在待机屏——用户点名 +UC = 0.339 六路,且 UN 本台架永久无数据,摆一排假通道不如不摆) +IA = 0.021 ← 示例为现状 ENG_PIN 引脚电压档:数字照显、不挂单位(挂单位 = +IB = 0.020 替用户完成没做的标定换算,同交流量页引脚档不造第二口径) +IC = 0.021 ← 升二次/一次值档后单位随 eng:UA/UB/UC 挂 V、IA/IB/IC 挂 A ────────────────────── ← 分隔线(y≈132) YYYY-MM-DD HH:MM:SS ← 底部实时时钟(每秒重绘,lv_timer 驱动 invalidate) ``` +- 空值/坏质口径与格式化的唯一真源 = 交流量页(`ui_page_ac.c`):无首帧或品质带 + `IV|NT|RAW|SB|BL|OV` → `--`;3 位小数定点格式化复用 `ui_w_editor_fmt_scaled`(不引 %f)。 +- 帧读取按 `ui_data_rt_seq()` 门控整帧拷(`ui_data.h` 头注);待机 1s 定时器整屏 + invalidate 即数值刷新节拍,未新增定时器。模拟器 `main.c` 自带固定仿真 rt 帧:待机截图 + (`--standby`)即双分支实证——UA/IA 显引脚档数字(0.812 / 0.046,不挂单位)、 + UB/UC/IB/IC 带 `Q_IV|Q_OV` 坏质显 `--`。 + **键语义(用户定案)**:待机屏上**只有 ENTER(确认键)进入菜单**;其余按键忽略(同时重置空闲计时)。 - 实现为**屏幕覆盖层**:进入时保存当前活动屏 + 组内焦点对象,加载待机屏并聚焦其容器;ENTER 时还原前屏与焦点。 - 内容页打开期间超时 → 同样切待机(页面对象保留在底层,ENTER 返回后原样恢复,编辑态不丢)。 @@ -324,7 +331,6 @@ Forbidden:`FAIL`/`ERROR`/`HardFault`。 | O1 | 断电 <10min 的"上电/重启"歧义 | §5.3 阈值折中,文档声明;如需精确可后续加掉电标志(PVD) | | O2 | 故障"已复归"/持续监测(mockup 语义) | v2:周期自检 + 活动故障状态机 + 恢复记录 | | O3 | ~~"清除记录"菜单项~~ **已实施(2026-10-26 道F task-4)** | 数据面 = `syslog_request_clear(id)` + `syslog_clear_state(id)`,落地在 defaultTask(唯一写者)的 `syslog_drain()` 尾部;UI 侧页面归记录/维护页批次。细口径见 `App/log/README.md` | -| O4 | 待机页电流值接实时数据 | 待交流量标定管线(AC 页占位数据替换)落地后接入 `tpafe5160_snapshot()`(原子快照;旧 `tpafe5160_get_buf()` 已于 2026-10-10 删除,见 `AGENTS.md`) | | — | FAT32 小追加簇开销 | §3 调研结论:写频率极低可接受;容量上限约束增长 | | — | UI 读与落盘并发 | 只读既有内容 + EOF 追加 + FatFS 系统锁,无互斥需求(§4.4) | diff --git a/scripts/ram_baseline.tsv b/scripts/ram_baseline.tsv index 0abfdea3..139cad88 100644 --- a/scripts/ram_baseline.tsv +++ b/scripts/ram_baseline.tsv @@ -21,4 +21,4 @@ date code ro rw zi er_irom1 er_pct iram1 iram1_pct ccm ccm_pct top_rwzi 2026-11-09 255160 31204 2080 152152 286364 27.3 96808 73.9 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;nand_ftl.o=8288;lftpd.o=7884;ui_net_sink.o=6802;ui_port.o=6432;wave_ring.o=5296;sb_link.o=4376;ch395f.o=4162;console_log.o=4132 2026-11-10 255160 31204 2080 152152 286364 27.3 96808 73.9 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;nand_ftl.o=8288;lftpd.o=7884;ui_net_sink.o=6802;ui_port.o=6432;wave_ring.o=5296;sb_link.o=4376;ch395f.o=4162;console_log.o=4132 2026-11-11 256024 31760 2080 152368 287784 27.4 97024 74.0 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;nand_ftl.o=8288;lftpd.o=7884;ui_net_sink.o=6802;ui_port.o=6432;wave_ring.o=5332;sb_link.o=4376;ch395f.o=4162;console_log.o=4132 -2026-11-13 256200 31764 2080 152368 287964 27.5 97024 74.0 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;nand_ftl.o=8288;lftpd.o=7884;ui_net_sink.o=6802;ui_port.o=6432;wave_ring.o=5332;sb_link.o=4376;ch395f.o=4162;console_log.o=4132 +2026-11-13 256428 31720 2080 152584 288148 27.5 97240 74.2 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;nand_ftl.o=8288;lftpd.o=7884;ui_net_sink.o=6802;ui_port.o=6432;wave_ring.o=5332;sb_link.o=4376;ch395f.o=4162;console_log.o=4132 diff --git a/scripts/size_attestation.json b/scripts/size_attestation.json index 868cf8a6..563832d9 100644 --- a/scripts/size_attestation.json +++ b/scripts/size_attestation.json @@ -1,25 +1,25 @@ { - "built_at": "2026-11-13T11:25:00+08:00", - "fingerprint": "39f4f69a673f97c33cc59b301e723ec8f1e03686f4556ac6abb1a5a6cd438796", + "built_at": "2026-11-13T13:11:29+08:00", + "fingerprint": "eb152c8e20a33b63da91fd3b5e32877b83b581c43d0c4956375ed13b6531db3f", "fingerprint_files": 1479, "fingerprint_source": "git-index", "gated_regions": [ "RW_IRAM1", "RW_CCM" ], - "git_head": "7c505b2457d977adf7750abbb841b0453fd6bfb9", + "git_head": "40a2816a9971928d1ca6fa218921b86dae79bd63", "map": "MDK-ARM/STM32F407-Demo/STM32F407-Demo.map", - "map_mtime": 1794540294, + "map_mtime": 1794542035, "pct": { - "ER_IROM1": 27.46, + "ER_IROM1": 27.48, "RW_CCM": 87.89, - "RW_IRAM1": 74.02, + "RW_IRAM1": 74.19, "UNINIT_CCM": 18.75 }, "regions": { "ER_IROM1": { "max": 1048576, - "size": 287964 + "size": 288148 }, "RW_CCM": { "max": 65280, @@ -27,7 +27,7 @@ }, "RW_IRAM1": { "max": 131072, - "size": 97024 + "size": 97240 }, "UNINIT_CCM": { "max": 256, @@ -37,10 +37,10 @@ "schema": 2, "scope_note": "\u540c\u7801\u51ed\u8bc1\uff1a\u6307\u7eb9\u8986\u76d6\u56fa\u4ef6\u4f53\u79ef\u76f8\u5173\u6e90\u7801\uff0c\u53e3\u5f84\u89c1\u672c\u811a\u672c docstring", "sizes": { - "code": 256200, - "ro_data": 31764, + "code": 256428, + "ro_data": 31720, "rw_data": 2080, - "zi_data": 152368 + "zi_data": 152584 }, "threshold_pct": 92.0, "worktree_dirt_at_stamp": 0,