LVGL 内存使用

LVGL 内存分为两种:管理内存和绘图缓冲区

1、管理内存是在lv_conf.h 中配置,建议使用内部sdram,外在外置内存比较慢。

#define LV_MEM_CUSTOM                       0
#if LV_MEM_CUSTOM == 0
    /* `lv_mem_alloc()`可获得的内存大小(以字节为单位)(>= 2kB) */
    #define LV_MEM_SIZE                     (48U * 1024U)          /*[字节]*/
2、可以把管理内存放在CCM内存中,这个内存存在STM32F407 系列中,ccm内存是直接连接cpu的,速度最快!!

在lv_conf.h 中配置配置方式如下:

还要在keil中勾选iram。如果不勾选也不会出现问题。刚刚测试也是可以的!!比较奇怪。记录一下!

注意:

如果使用原子例程,一定要把原子的内存管理文件去掉(malloc.c )。否则会报错。这个malloc.c 文件编译地址会和lvgl使用CCM地址冲突,导致无法编译!!

验证是否在使用ccm内存,在系统任务中创建指针,选择用lv_mem.c文件中内存申请函数,串口打印地址!

串口打印如下,可以看到地址信息是0x1000 0000 开头地址和0x2000 0000 。

/

3、管理内存放在外置SDRAM中,比较慢,只需要把地址改成 (0x68000000)即可

 #define LV_MEM_ADR                     (0x68000000)    /*0: 未使用*/

其他和上面1一样!

4、绘图缓冲区

这个内存在lv_port_disp_template.c 文件中修改。下图是使用内部内存。使用外部地址修养在数组后面写上地址  __attribute__((at(0x68000000)))。

例如。这个是双缓冲区,用的是外部SDRAM,大小是1mb。这样就可以开全尺寸缓冲区!!

注意:双缓冲区,第二个需要加上第一个缓冲区的大小,就是屏幕像素(例如 320*240)* 2 ,2是像素大小(彩色屏一般是16bit或者32bit)。我这里屏幕是320*240,使用彩色是16bit(RBG565)。

    /* 全尺寸双缓冲区示例) 并且在下面设置 disp_drv.full_refresh = 1 */
    static lv_disp_draw_buf_t draw_buf_dsc_3;
    static lv_color_t buf_3_1[MY_DISP_HOR_RES * MY_DISP_VER_RES] __attribute__((at(0x68000000)));      /* 设置一个全尺寸的缓冲区 */
    static lv_color_t buf_3_2[MY_DISP_HOR_RES * MY_DISP_VER_RES] __attribute__((at(0x68000000 + MY_DISP_HOR_RES * MY_DISP_VER_RES * 2)));      /* 设置另一个全尺寸的缓冲区 */
    lv_disp_draw_buf_init(&draw_buf_dsc_3, buf_3_1, buf_3_2, MY_DISP_HOR_RES * MY_DISP_VER_RES);/* 初始化显示缓冲区 */

总结;

1、如果内存管理方面,出现问题,考虑可能是原子的内存管理问题(malloc.c )。去掉这个问题,重新编译就会正常!/

2、ccm内存,在配置时候超过 64k,也不会报错!可以问题就是编译器问题!后面这个使用时候,需要注意。这里记录一下。

3、lvgl管理内存:影响控件数量。这个内存大小要大于2k,正常20k 就够使用了。
此内存大小为lvgl内置内存管理模块初始化的内存池的大小,对后续的界面显示有一定的影响。lvgl内置的内存管理是基于TLSF算法的内存管理,对TLSF算法有兴趣的小伙伴可以自行百度或者查看下面的链接了解关于TLSF算法。
 在开发某个项目UI的过程中发现,创建一个app后,里面显示的控件有数量限制,但对每种控件数量限制还不一样,如按钮可以创建的个数和图标控件可以创建的个数不同。
  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值