I1 绘制缓冲布局写入 ui_port.h 并去掉多余护栏,取帧端补防回归注记

This commit is contained in:
2026-09-21 03:50:54 +08:00
parent 368050dbc3
commit e6876cf979
3 changed files with 27 additions and 15 deletions
+19
View File
@@ -22,6 +22,25 @@ extern "C" {
#define UI_SCREEN_H 160
#define UI_FB_SIZE ((UI_SCREEN_W * UI_SCREEN_H) / 8)
/*
* LVGL 索引色(I1)绘制缓冲布局 = [palette][pixel data](2026-09-21 台架实证;
* 改本端口或升级 LVGL 版本前必读):
* - lv_draw_buf_create() : 尺寸 = stride*h + LV_COLOR_INDEXED_PALETTE_SIZE(cf)*4
* - lv_draw_buf_goto_xy()/lv_draw.c : 取绘制指针时 data += palette(像素不从缓冲首址开始)
* - lv_refr get_max_row() : 从 data_size 里扣掉 palette 才当可用像素
* 但 lv_display_set_buffers()/lv_draw_buf_init() 的容量校验**只看 stride*h(不含 palette)**,
* 故"只给 stride*h"会被静默接受;实测两种后果:
* 1) 末 palette 个像素字节写到缓冲之外(金丝雀实测越界 8B,曾打脏紧邻 .bss 的
* s_frame_box[0] 指针 → 野指针 HardFault);
* 2) flush 回调收到的首地址含 palette,照原样整帧拷贝会让推流画面整体错位 8B。
* 规则:绘制缓冲按 UI_DRAW_BUF_SIZE 提供、上报 LVGL 的尺寸也用 UI_DRAW_BUF_SIZE;
* flush 取像素必须 color_p + UI_DRAW_BUF_PALETTE。
* 注:此处用字面量 8(I1 = 2 色 x 4 字节)以免头文件依赖 lvgl.h;ui_port.c 已按
* LV_COLOR_INDEXED_PALETTE_SIZE(LV_COLOR_FORMAT_I1)*4 核对一致。
*/
#define UI_DRAW_BUF_PALETTE 8u
#define UI_DRAW_BUF_SIZE (UI_FB_SIZE + UI_DRAW_BUF_PALETTE)
/* 远端按键码(与 DTU-HMI key.h 保持一致) */
#define UI_KEY_UP 0x02
#define UI_KEY_DOWN 0x40