lgvl菜单项优化

项目场景:

  1. 嵌入式CPU:ASR3603S+MCU,24MB ROM+16MB RAM

问题描述

  1. 功能菜单、设置菜单,菜单列表上下滑动有些慢。
  2. LVGL菜单滑动过程中卡顿感。

原因分析:

  1. 代码执行耗时。
  2. 图片加载耗时。
  3. 缓冲区太小多次刷新耗时。

解决方案:

  1. 先看代码是不是有一些不必要的逻辑在里面,如果存在,则优化逻辑,加以验证。

  2. 分析当前菜单图片耗时,加起来快300ms。
    请添加图片描述
    把原图不必要的部分裁剪掉压缩一下,再测试,有效果。
    请添加图片描述

  3. 图片资源是不是用的读取文件的形式,如果是,如果运行内存允许,看要不要改用初始化时缓存图片资源,退出时销毁。

  4. 调整缓冲区大小(lv_img_cache_set_size)。

资料

Image caching(图片缓存)

有时打开图像需要很多时间。 连续解码 PNG 图像或从缓慢的外部存储器加载图像将是低效的并且不利于用户体验。

因此,LVGL 缓存给定数量的图像。缓存意味着一些图像将保持打开状态,因此 LVGL 可以从 dsc->img_data
快速访问它们,而无需再次解码它们。

当然,缓存图像是资源密集型的,因为它使用更多的 RAM(用于存储解码的图像)。 LVGL
尝试尽可能地优化流程(见下文),但您仍需要评估这是否对您的平台有益。如果您有一个深度嵌入的目标,可以从相对较快的存储介质中解码小图像,则图像缓存可能不值得。

下面是list菜单demo


static void event_handler(lv_obj_t * obj, lv_event_t event)
{
    if(event == LV_EVENT_CLICKED) {
        printf("Clicked: %s\n", lv_list_get_btn_text(obj));
    }
}

void lv_ex_list_1(void)
{
    /*Create a list*/
    lv_obj_t * list1 = lv_list_create(lv_scr_act(), NULL);
    lv_obj_set_size(list1, 454, 129);
    lv_obj_align(list1, NULL, LV_ALIGN_CENTER, 0, 0);

    /*Add buttons to the list*/
    lv_obj_t * list_btn;

    list_btn = lv_list_add_btn(list1, LV_SYMBOL_FILE, "New");
    lv_obj_set_event_cb(list_btn, event_handler);

    list_btn = lv_list_add_btn(list1, LV_SYMBOL_DIRECTORY, "Open");
    lv_obj_set_event_cb(list_btn, event_handler);

    list_btn = lv_list_add_btn(list1, LV_SYMBOL_CLOSE, "Delete");
    lv_obj_set_event_cb(list_btn, event_handler);

    list_btn = lv_list_add_btn(list1, LV_SYMBOL_EDIT, "Edit");
    lv_obj_set_event_cb(list_btn, event_handler);

    list_btn = lv_list_add_btn(list1, LV_SYMBOL_SAVE, "Save");
    lv_obj_set_event_cb(list_btn, event_handler);

    list_btn = lv_list_add_btn(list1, LV_SYMBOL_BELL, "Notify");
    lv_obj_set_event_cb(list_btn, event_handler);

    list_btn = lv_list_add_btn(list1, LV_SYMBOL_BATTERY_FULL, "Battery");
    lv_obj_set_event_cb(list_btn, event_handler);
}

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值