【兆易创新GD32H759I-EVAL开发板】拥有外部32MB的 SDRAM
在使用LVGL时 可以随意分配大小
但是我们也应该明白 所定义的内存大小的 的一些概念
LVGL中 有单独的 定义 LV_MEM_SIZE 定义内存大小
LVLG 中 在定义 显示程序 接口时 还需要用到 lv_disp_draw_buf_init() 分配显存
这两处的 内存 有什么关系?
LV_MEM_SIZE
和lv_disp_draw_buf_init
函数中的显示缓存(例如buf_3_1
, buf_3_2
)是LVGL图形库中两个关键但不同功能的配置项。理解它们之间的关系对于优化LVGL的性能和内存使用非常重要。
LV_MEM_SIZE
LV_MEM_SIZE
是在LVGL配置中定义的一个宏,它指定了LVGL内部使用的内存池的大小。这个内存池用于LVGL的对象、样式、动画等动态分配的内存需求。简而言之,LV_MEM_SIZE
决定了LVGL可以使用的总内存量,对于运行LVGL的系统来说,这个值需要根据可用内存资源、UI复杂性等因素谨慎设置。
显示缓存(Display Buffer)
显示缓存,如代码中的buf_3_1
和buf_3_2
,是用于存储屏幕绘制操作的临时像素数据的内存区域。当LVGL绘制界面元素时,它会首先在显示缓存中进行,然后再将这些数据发送到屏幕。这样做的目的是为了提高绘图效率,减少屏幕刷新次数,从而优化性能和用户体验。在lv_disp_draw_buf_init
函数中指定的缓存大小(即MY_DISP_HOR_RES * MY_DISP_VER_RES
)直接决定了一次可以绘制的最大像素数量。
LV_MEM_SIZE与显示缓存的关系
虽然LV_MEM_SIZE
和显示缓存(buf_3_1
, buf_3_2
)都涉及内存配置,但它们服务于LVGL的不同方面:
LV_MEM_SIZE
是LVGL内部动态分配机制的全局内存池大小,影响整个库的对象创建、事件处理、样式应用等方面的能力。- 显示缓存 则专门用于图形渲染过程,确保绘图操作的高效执行。
没有直接关系:LV_MEM_SIZE
的大小不会直接影响显示缓存的大小,它们各自独立配置。然而,从整个系统资源管理的角度看,两者都从系统的总可用内存中分配,因此在设计时需要考虑整体内存的分配和优化。
实践中的配置考量
在实际应用中,合理配置LV_MEM_SIZE
和显示缓存的大小是非常重要的:
LV_MEM_SIZE
应足够大,以支持应用程序的UI复杂度,包括所需的LVGL对象数、样式等。如果LV_MEM_SIZE
设置得太小,可能会导致内存分配失败,影响UI的正常运行。- 显示缓存 的大小影响渲染性能。较大的显示缓存可以减少渲染次数,提高渲染效率,但同时也会占用更多的内存。通常,显示缓存至少需要能容纳一个屏幕的像素数据,但根据具体的显示需求和系统资源,可以配置为更大。