UI 待机显示页接入 UA/UB/UC/IA/IB/IC 六路实时值(v1.1)

- 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 显 --)。
This commit is contained in:
2026-11-13 13:11:42 +08:00
parent 40a2816a99
commit 5bab248dee
7 changed files with 157 additions and 42 deletions
+119 -12
View File
@@ -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;
+3 -1
View File
@@ -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
@@ -47,10 +47,10 @@ dhara 失败类 +84;RO 另 +208,全是该失败类名表)→ `ER_IROM1`
<!-- MEM_SNAPSHOT:BEGIN generated by scripts/check_mem_numbers.py -->
| 区域 | 用量 | 容量 | 占比 |
|---|---|---|---|
| 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%** |
<!-- MEM_SNAPSHOT:END -->
各区的容量与常量来源:
+3 -3
View File
@@ -15,16 +15,16 @@
<!-- MEM_BUDGET:BEGIN generated by scripts/ram_baseline.py -->
| 区域 | 用量 | 容量 | 占比 | 门禁(≤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 | — | 参考 |
@@ -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) |
+1 -1
View File
@@ -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
1 date code ro rw zi er_irom1 er_pct iram1 iram1_pct ccm ccm_pct top_rwzi
21 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
22 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
23 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
24 2026-11-13 256200 256428 31764 31720 2080 152368 152584 287964 288148 27.5 97024 97240 74.0 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
+11 -11
View File
@@ -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,