Files
STM32F4-Base/Lib/lv_conf.h
T
wandering1 a7f526569a perf(mem): R-9 落地——LVGL 池 40→16 KB,SRAM1 74.9%→56.1%
取值依据是实测水位,不是预估:菜单根框 5,368 B、开页-关页往返
5,448 B、最重页面峰值 6,568 B(占 16 KB 的 40%)、真机开机
used=3,192 B。注意 16,384 B 建池后 lv_mem_monitor 报的 total 是
15,020 B(TLSF 控制块与对齐元数据 ≈1,364 B),核算余量用后者。

两端 lv_conf.h 同步改值(lv-conf-sync 生效值比对 163 项 PASS),
Lib/lv_conf.h 的 UTF-8 BOM 已按原样补回(Edit 会静默剥掉)。

验证:
- @build 0 错 0 警;ZI 154,456 → 129,880,精确 −24,576 B
- SRAM1 98,144/74.9% → 73,568/56.1%(余 57,504 B);CCM 不变 87.9%
- 模拟器菜单回归 PASS(8 状态像素 + 池基线 5,368 B 未变);11 页
  黄金参考逐字节 10/11 一致,往返池水位 5,448 B 分毫未变
- 唯一差异 netcfg_save 保存态:用 40 KB 旧池做 A/B 复测同样失败,
  确认与本改动无关(属 506eccc 的 cfg_file 行为变化),未刷黄金
  参考掩盖,留给该改动属主处置
- @test PASS:fw build Oct 15 2026 07:31:34,无 [ERR]/Fault,
  开机 622 ms 到 net init: OK,menu build done: used=3192
- 本地 CI 全绿(L0 + L0.5,15 runner / 955 断言)
- 台账受管区与内存快照区已 --write 回填,mem-budget / mem-numbers
  由红转绿

连带结论:R-2 后半待迁体量 54,146 → 29,570 B,瓶颈由 SRAM1 换到
CCM(只剩 7,904 B);解锁链第 ① 步完成,下一步只差缩堆 56→32 KB
(B5 是反向扩容,缩回前须重跑 stack_report.py + 上板 min_ever)。

文档同步 20 处:本报告按修复即销项删除 R-9 行,并改写 §0.2/§0.3/
§0.4/§5.1/§5.2/§5.3/§6.4 与变更记录、去处表;RAM使用分析 §2.6.2
新增实测水位表、阶段 1.1 标已执行;台账 §3 解锁链、登记簿 N-27、
任务规划 README W3 行与链路图;UI 四篇、产品需求、内存内容分配
策略、运行与自检记录、项目部署环境要求、测试开发标准流程、
simulator/README、ui-verify skill 常量。顺带订正三处与脚本不符的
旧值:池水位常量 4784/4864 → 5368/5448、FreeRTOS 堆 48 → 56 KB。
2026-10-15 09:56:15 +08:00

189 lines
9.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file lv_conf.h
* @brief LVGL v9 配置(STM32F407ZGTx,160x160 单色 1bpp,离屏渲染+网络推流)
* @note 本项目仅用作离屏渲染:flush 把 1bpp 像素写入内存帧缓冲,
* 由 RemoDispBus 协议按需经网络发出。无真实屏、无触摸。
*/
#ifndef LV_CONF_H
#define LV_CONF_H
/* ⚠ 本文件与 simulator/lv_conf.h 必须保持**同一特性子集**,已由门禁校验:
* `python scripts/check_lv_conf_sync.py`(pre-commit 钩子 lv-conf-sync,always 跑)。
* 2026-10-11 清理:删掉 14 个 LVGL 9.3 **不存在**的选项(LVGL 8 / 9.4 模板残留,
* 写了不生效,与已删的 LV_USE_THEME_BASIC 同类):LV_USE_PNG / JPG / ANIMATION /
* ENCODER / MOUSEWHEEL / IMGBTN / METER / COLORWHEEL / TEXTLINE / ASSERT_USER_CODE /
* ASSERT_LAYOUT、LV_DRAW_SW_YIELD / ASYNC、LV_COLOR_CHROMA_KEY。
* 另把此前靠 lv_conf_internal 默认值隐式生效的开关显式固化为 0(见下"核心特性"块)。 */
/* 1bpp 单色 */
#define LV_COLOR_DEPTH 1
/* 控件裁剪(F-2/F-3,2026-10-11):本项目 UI 全部自绘——实测 Drivers/BSP/UI、App、
* simulator 三处**零控件构造函数、零 flex/grid 布局调用**,只用 lv_obj_create +
* lv_theme_mono_init。此前这些类靠 lv_theme_simple(9.3 默认 =1)当锚点链进镜像:
* label 4,042 + buttonmatrix 3,586 + textarea 3,632 + bar 1,800 + button 26
* = 13,086 B;另 flex 2,776 + grid 2,592 = 5,368 B。
* ⚠ 将来引入控件型页面(U2 原型库)时按需逐项打开,并同步 simulator/lv_conf.h
* 后复跑 ui-verify 五步门禁。
* 注:原 LV_USE_OBJ 在 9.3 不是有效选项(lv_conf_internal 无此宏),已删。 */
#define LV_USE_FLEX 0 /* F-3:全仓无 lv_obj_set_flex_* 调用 */
#define LV_USE_GRID 0 /* F-3:全仓无 lv_obj_set_grid_* 调用 */
#define LV_USE_LABEL 0
#define LV_USE_BUTTON 0
#define LV_USE_BUTTONMATRIX 0
#define LV_USE_BAR 0
#define LV_USE_TEXTAREA 0
#define LV_USE_MENU 0
#define LV_USE_IMAGEBUTTON 0 /* 9.3 默认 1;显式关死,与 simulator 一致 */
/* 刷新周期(ms):离屏渲染,无需高刷 */
#define LV_DEF_REFR_PERIOD 20
/* 关闭日志,省 RAM 与代码。
* 注:9.3 **没有** LV_USE_ANIMATION(动画属核心),原该行是无效项,已删。 */
#define LV_USE_LOG 0
/* 不使用 LVGL 自带 OS 抽象,由 ui_task 手动调用 lv_timer_handler */
#define LV_USE_OS 0
#define LV_OS_PRIORITY 0
#define LV_OS_TASK_NAME "ui"
/* 内存池:1bpp 小界面 + 按需建毁(任一时刻只放"当前导航路径 + 当前内容页")。
* 2026-10-15 由 40KB 收到 16KB:实测菜单基线 5,368 B、开页-关页往返残留 5,448 B
* (门禁常量 simulator/tests/check_menu_rows.py + check_content_pages.py),≈3× 余量。
* 再往下试 8KB 须先跑全量 UI 回归(PC + 实机)无分配失败。
* ⚠ 两端同值是硬约束(lv-conf-sync 比对生效值):simulator/lv_conf.h 同步改。 */
#define LV_MEM_SIZE (16 * 1024)
#define LV_MEM_ADR 0 /* 0 = 内部静态分配 */
/* 断言全部关闭,减少体积(9.3 只有这 4 个 ASSERT 宏;原 ASSERT_USER_CODE /
* ASSERT_LAYOUT 是 LVGL 8 残留,已删) */
#define LV_USE_ASSERT_NULL 0
#define LV_USE_ASSERT_MALLOC 0
#define LV_USE_ASSERT_OBJ 0
#define LV_USE_ASSERT_STYLE 0
/* 内置字体:先启用 Latin 以通过编译;
* 中文 1bpp 字库由 fontconverter 生成后通过 ui_font_cn_12 接入并替换默认字体 */
#define LV_FONT_MONTSERRAT_12 1
#define LV_FONT_MONTSERRAT_14 0
#define LV_FONT_MONTSERRAT_16 0
#define LV_FONT_MONTSERRAT_18 0
#define LV_FONT_MONTSERRAT_20 0
#define LV_FONT_MONTSERRAT_22 0
#define LV_FONT_MONTSERRAT_24 0
#define LV_FONT_MONTSERRAT_28 0
#define LV_FONT_MONTSERRAT_32 0
#define LV_FONT_MONTSERRAT_48 0
#define LV_FONT_UNSCII_8 0
#define LV_FONT_UNSCII_16 0
#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0
#define LV_FONT_SIMSUN_16_CJK 0 /* 预留:中文全字库(若启用需对应源文件) */
/* 默认字体:阶段一先用 Latin 12;中文接入后改为 &ui_font_cn_12 */
#define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(ui_font_cn_12)
#define LV_FONT_DEFAULT &ui_font_cn_12
/* 文本编码 UTF-8(菜单含中文) */
#define LV_TXT_ENC LV_TXT_ENC_UTF8
/* 主题:只用 mono(ui_port.c 显式 lv_theme_mono_init(disp, true, ...) + set_theme + apply)。
* ⚠ 9.3 **没有** LV_USE_THEME_BASIC —— 原那条是无效配置(写了也不生效,已删)。
* ⚠ 关键:LV_USE_THEME_SIMPLE 默认 =1,lv_display_create() 会因此强链 lv_theme_simple,
* 而它正是把上面那些控件类拉进镜像的锚点(主题本体 866 B + 锚定控件 13,086 B)。 */
#define LV_USE_THEME_DEFAULT 0
#define LV_USE_THEME_SIMPLE 0
#define LV_USE_THEME_MONO 1
/* 绘制相关:1bpp 无需 GPU/抗锯齿 */
/* 复杂绘制必须开启:主界面顶部开口浅 V 装饰含斜线,lv_line 斜段依赖 LV_DRAW_SW_COMPLEX,
* 关闭则两腿不渲染(只画水平线)。原值靠 lv_conf_internal 默认(=1)隐式生效,此处显式固化。
* 注意:LV_DRAW_SW_CIRCLE_CACHE_SIZE 须非零(默认 4),否则零长数组编译报错。 */
#define LV_DRAW_SW_COMPLEX 1
/* 简单绘制层缓冲:9.3 默认 24 KB(从 LVGL 池里取),本项目 UI 不建层 →
* 与 simulator 一致显式设 0(golden 回归已在 0 下逐字节验证) */
#define LV_DRAW_LAYER_SIMPLE_BUF_SIZE 0
/* 注:9.3 没有 LV_DRAW_SW_YIELD / LV_DRAW_SW_ASYNC(9.4 才有),原两行无效,已删。 */
/* 软件渲染器的颜色格式支持(F-1,2026-10-11):显示为 I1(LV_COLOR_DEPTH 1),
* 只有 blend_to_i1 会被用到。此前 11 个宏全靠 lv_conf_internal 默认(=1)隐式生效,
* 把 7 个用不到的混合核整份链进镜像:实测 blend_to_* 合计 40,582 B,其中 i1 仅 5,272 B
* → 死代码 35,310 B。每份 blend 文件都是文件级 #if 守卫,关掉 = 整个 TU 不参与编译。
* ⚠ 字形 A8 位图是作为 **mask** 传入的,混合按**目的**格式(I1)分派 → 不需要
* SUPPORT_A8/L8/AL88(此判断已由 simulator 的 I1-only 配置 + golden 回归验证)。
* 取值与 simulator/lv_conf.h 保持一致(模拟器早已是 I1-only)。 */
#define LV_DRAW_SW_SUPPORT_I1 1
#define LV_DRAW_SW_SUPPORT_L8 0
#define LV_DRAW_SW_SUPPORT_AL88 0
#define LV_DRAW_SW_SUPPORT_A8 0
#define LV_DRAW_SW_SUPPORT_RGB565 0
#define LV_DRAW_SW_SUPPORT_RGB565_SWAPPED 0
#define LV_DRAW_SW_SUPPORT_RGB565A8 0
#define LV_DRAW_SW_SUPPORT_RGB888 0
#define LV_DRAW_SW_SUPPORT_XRGB8888 0
#define LV_DRAW_SW_SUPPORT_ARGB8888 0
#define LV_DRAW_SW_SUPPORT_ARGB8888_PREMULTIPLIED 0
/* 输入设备:全部不用(远程按键经 RemoDispBus 直接注入,见 ui_net_sink)。
* 注:9.3 没有 LV_USE_MOUSEWHEEL / LV_USE_ENCODER(LVGL 8 残留),已删;
* LV_USE_KEYBOARD 原在本文件定义两次,去重(下方控件块保留一处)。 */
/* 不使用的第三方扩展(9.3 的图片解码宏是 LV_USE_LODEPNG / TJPGD,
* 没有 LV_USE_PNG / LV_USE_JPG —— LVGL 8 残留,已删) */
#define LV_USE_BMP 0
#define LV_USE_GIF 0
#define LV_USE_QRCODE 0
#define LV_USE_BARCODE 0
#define LV_USE_IME_PINYIN 0
#define LV_USE_GRIDNAV 0
#define LV_USE_FRAGMENT 0
/* 裁剪未用控件,减小体积(本 UI 只用 lv_obj + 自绘,见文件头 F-2/F-3 说明)。
* 注:LV_USE_COLORWHEEL / IMGBTN / METER / TEXTLINE 在 9.3 不存在(LVGL 8 残留),已删。 */
#define LV_USE_ANIMIMG 0
#define LV_USE_ARC 0
#define LV_USE_CHART 0
#define LV_USE_CHECKBOX 0
#define LV_USE_DROPDOWN 0
#define LV_USE_KEYBOARD 0
#define LV_USE_LED 0
#define LV_USE_LIST 0
#define LV_USE_MSGBOX 0
#define LV_USE_ROLLER 0
#define LV_USE_SCALE 0
#define LV_USE_SLIDER 0
#define LV_USE_SPAN 0
#define LV_USE_SPINBOX 0
#define LV_USE_SPINNER 0
#define LV_USE_SWITCH 0
#define LV_USE_TABVIEW 0
#define LV_USE_TILEVIEW 0
#define LV_USE_WIN 0
#define LV_USE_TABLE 0
#define LV_USE_CALENDAR 0
#define LV_USE_CANVAS 0
#define LV_USE_IMAGE 0 /* 菜单未用图片控件;lv_menu 已关,无图标依赖 */
/* 核心特性:此前全靠 lv_conf_internal 默认值隐式生效(默认 =1 的整份链进固件),
* 现显式固化为 0,并与 simulator/lv_conf.h 对齐(check_lv_conf_sync.py 校验)。
* 其中 LV_USE_OBSERVER 默认 1 → 固件此前一直白链 lv_observer.c。 */
#define LV_USE_OBSERVER 0
#define LV_USE_FLOAT 0
#define LV_USE_MATRIX 0
#define LV_USE_VECTOR_GRAPHIC 0
#define LV_USE_OBJ_PROPERTY 0
#define LV_USE_GESTURE_RECOGNITION 0
#define LV_USE_COLOR_FILTER 0
#define LV_USE_DRAW_PXP 0 /* NXP 并行像素引擎,STM32 无关 */
#define LV_WIDGETS_HAS_DEFAULT_VALUE 0
/* 以下两组是已关父项(LV_USE_LABEL / LV_USE_THEME_DEFAULT)的子选项,本身惰性,
* 但显式写死可防"将来只在一端启用父项"时的静默漂移 */
#define LV_LABEL_TEXT_SELECTION 0
#define LV_LABEL_LONG_TXT_HINT 0
#define LV_LABEL_WAIT_CHAR_COUNT 0
#define LV_THEME_DEFAULT_DARK 0
#define LV_THEME_DEFAULT_GROW 0
#define LV_THEME_DEFAULT_TRANSITION_TIME 0
#endif /* LV_CONF_H */