|
|
emwin三缓冲问题
本帖最后由 dirty_data 于 2026-3-24 17:11 编辑
使用32位sdram时,三缓冲可以正常使用,但改为16位16m大小的sdram并移植过去后,三缓冲不能正常工作了,sdram可以正常使用。以下是一些宏配置。
[color=rgba(0, 0, 0, 0.85)][backcolor=rgba(0, 0, 0, 0.04)]sdram.h
#define Bank5_SDRAM_ADDR ((uint32_t)(0XC0000000)) /* SDRAM开始地址 */
#define EXT_SDRAM_ADDR ((uint32_t)0xC0000000)
#define EXT_SDRAM_SIZE (16 * 1024 * 1024)/* LCD显存,第1页, 分配4M字节 */
#define SDRAM_LCD_BUF1 EXT_SDRAM_ADDR/* LCD显存,第2页, 分配4M字节 */
#define SDRAM_LCD_BUF2 (EXT_SDRAM_ADDR + SDRAM_LCD_SIZE)
#define SDRAM_LCD_SIZE (4 * 1024 * 1024) /* 每层4M */
#define SDRAM_LCD_LAYER 2 /* 2层 *//* 剩下的8M字节,提供给应用程序使用 */
#define SDRAM_APP_BUF (EXT_SDRAM_ADDR + SDRAM_LCD_SIZE * SDRAM_LCD_LAYER)
#define SDRAM_APP_SIZE (EXT_SDRAM_SIZE - SDRAM_LCD_SIZE * SDRAM_LCD_LAYER)
malloc.c
static __align(32) uint8_t mem3base[MEM3_MAX_SIZE] __attribute__((at(0XC0600000))); /* 外部SDRAM内存池
static MT_TYPE mem3mapbase[MEM3_ALLOC_TABLE_SIZE] __attribute__((at(0XC0600000 + MEM3_MAX_SIZE))); /* 外部SRAM内存池MAP */
malloc.h
/* mem3内存参数设定.mem3的内存池处于外部SDRAM里面 */
#define MEM3_BLOCK_SIZE 64 /* 内存块大小为64字节 */
#define MEM3_MAX_SIZE 8*1024*1024 /* 最大管理内存 */
#define MEM3_ALLOC_TABLE_SIZE MEM3_MAX_SIZE/MEM3_BLOCK_SIZE /* 内存表大小 */
GUIDRV_Lin_Template.c
#define XSIZE_PHYS 1024 /* 最大支持1280 * 800 */
#define YSIZE_PHYS 600
#define NUM_BUFFERS 3 /* 使用多缓冲时的缓冲数量 */
#define NUM_VSCREENS 1 /* 使用虚拟屏幕是的虚拟屏幕数量 */
#define BK_COLOR GUI_DARKBLUE
#undef GUI_NUM_LAYERS
#define GUI_NUM_LAYERS 1
#define COLOR_CONVERSION_0 GUICC_M565
#define DISPLAY_DRIVER_0 GUIDRV_LIN_16
#ifndef NUM_VSCREENS
#define NUM_VSCREENS 1
#define LCD_LAYER0_FRAME_BUFFER EXT_SDRAM_ADDR /* 第一层缓冲区 */
#define LCD_LAYER1_FRAME_BUFFER ((uint32_t)(0xC0000000+1024*600*2*NUM_VSCREENS * NUM_BUFFERS)) /* 第二层缓冲区 */ |
|