LVGL显示优化—基本优化
重回桃花源
编辑于 2022年08月03日 14:32

一、基本优化

    这里阶段的优化是改变LVGL的一些基本设置,以提升帧数

    1、LVGL帧率限制

    首先,LVGL是有一个帧率刷新周期的宏定义,在lv_conf.h里。LVGL会通过LVGL内部的tick,定时去刷屏幕,也就是说该宏定义限定了LVGL刷屏帧率的上限,默认满帧33帧。

代码块
clike
自动换行
复制代码
#define LV_DISP_DEF_REFR_PERIOD 30 /[ms]/
复制成功

    这里我们直接改成10ms刷新一次,满帧100帧。顺手再把输入设备读取周期也改成10ms

    2、刷屏方法效率

        不要使用画点函数,例如以下,效率很低

代码块
clike
自动换行
复制代码
    for(y = area->y1; y <= area->y2; y++) {
        for(x = area->x1; x <= area->x2; x++) {
            put_px(x, y, *color_p)
            color_p++;
        }
    }
复制成功

    3、代码优化等级

    CUBEMX生成的项目默认是arm compiler v5 + -O3 ,是性能较好的配置,不过大家自己移植lvgl未使用cubemx等代码生成工具,可能为了调试方便使用了O0优化等级,这个影响很大,429平台上帧率提升高达33%,-o3需要注意一下代码优化问题,善用volatile关键字,所以我这里还是选-O2吧,工程里也常用O2。下面的optimize fot time 也勾上

    4、编译器版本

    尽量用arm compiler5

    5、LV_DPI_DEF配置

    在lv_conf.h里配置DPI

代码块
clike
自动换行
复制代码
/* 
  * LV_DPI_DEF 注意这里,虽然LVGL的作者说这个没这么重要,但他会严重影响到LVGL的动画效果
  * 你应该进行DPI的手动计算,例如480x272分辨率1.28英寸的屏幕,那么 DPI = ((√480*272) / 1.28) ≈ 89
  */
#define LV_DPI_DEF                  89     /*[px/inch]*/
复制成功

    6、堆栈设置

    官方有给推荐值

    我们可以在STM32的启动文件里配置,我这里配置栈是8KB,堆不是这里设置。或者说是定义一个宏,LVGL会自己去配置堆。先是栈:

    堆设置:

    由 lv_conf.h 中的 LV_MEM_SIZE 宏进行设置,建议是大于16bB,我这里配置成32B。

    7、显存大小更改

    依据来自下面up主的测试

    直接看结论

    所以我们修改显存,打开lv_port_disp_template.c修改成如下:

    效果显著,当然担心sram不够的话,还可以把地址,指向外部sram。虽然那个视频里说了,外部sram速度会慢,但是显存空间大了速度又会快。在外部sram下使用全尺寸显存,还是会比sram里非全尺寸快的。