CCM扩容FreeRTOS堆+DMA阈值1024防栈缓冲进CCM+HardFault现场报告与栈/内存钩子+修defaultTask栈溢出+LVGL绘制缓冲护栏+存储套件05/06与恢复模式

This commit is contained in:
2026-09-21 00:47:58 +08:00
parent 9bb5a8dcae
commit a7d4339e6f
9 changed files with 357 additions and 36 deletions
+10 -2
View File
@@ -14,8 +14,16 @@
/* 160x160 1bpp 帧 = 3200 字节 */
static uint8_t g_ui_fbuf[UI_FB_SIZE];
/* LVGL 绘制缓冲(与帧同尺寸,整屏渲染) */
static uint8_t g_ui_draw_buf[UI_FB_SIZE];
/* LVGL 绘制缓冲(整屏渲染)。LVGL 9.3.0 对 I1 格式的整帧渲染,会在其自身算出的
* stride*h(=3200) 之后再越界多写 1 个字节(实测台架金丝雀命中 draw_buf[3200]=0xFF)。
* 若紧邻其后的 .bss(本例 ui_menu_view.o 的 s_frame_box)恰有指针,其最低字节被
* 打成 0xFF → 野指针 → HardFault(PC=lv_obj_get_scroll_y,2026-09-20 存储套件实证,
* SRAM/CCM 两种堆布局下同一签名、与 CCM 无关)。物理多留 UI_DRAW_BUF_GUARD 字节
* 吸收该越界写;逻辑尺寸仍按 UI_FB_SIZE 上报 LVGL(渲染数学 stride*h 不变)。
* Lib/LVGL 为第三方库,不改其源码,越界容纳放在本移植层。 */
#define UI_DRAW_BUF_GUARD 32
static uint8_t g_ui_draw_buf[UI_FB_SIZE + UI_DRAW_BUF_GUARD];
/* 单键缓冲:菜单无需多键队列,仅保存最近一次待处理键 */
static volatile uint8_t g_pending_key = 0;