CCM扩容FreeRTOS堆+DMA阈值1024防栈缓冲进CCM+HardFault现场报告与栈/内存钩子+修defaultTask栈溢出+LVGL绘制缓冲护栏+存储套件05/06与恢复模式
This commit is contained in:
@@ -46,7 +46,12 @@ extern SPI_HandleTypeDef hspi1;
|
||||
volatile uint8_t g_spi1_dma_done;
|
||||
|
||||
/* DMA 阈值(字节数超过此值使用 DMA 传输) */
|
||||
#define GD5F_DMA_THRESHOLD 32
|
||||
/* DMA 阈值 1024B(2026-09-20):阈值以下走 CPU 轮询。存在把**栈上小缓冲**
|
||||
* 直接传进本驱动做收发的大小(dhara meta 读 132B、dhara_nand_is_free 64B),
|
||||
* 任务栈随 FreeRTOS 堆驻留 CCM(0x10000000),而 DMA1/DMA2 物理上不可达
|
||||
* CCM——此类传输必须留在轮询域,否则静默失败(CCM 首次扩容实验实证的根因)。
|
||||
* 页级大块传输(2048)仍走 DMA,源/目的全部为文件作用域静态缓冲。 */
|
||||
#define GD5F_DMA_THRESHOLD 1024
|
||||
|
||||
/*
|
||||
* 函数功能:SPI1 TX DMA 完成回调(PROGRAM_LOAD 数据发送用)
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user