超全面的Lvgl优化方案

LVGL开发教程:三、帧率优化以及测评 帧率最高是方式⑥但是动画切换画面(运行Music例程)会有一点点撕裂,实际效果不如全屏双缓冲方式3。可以参考文章开头链接进行帧率优化。最理想的方式:内部Ram全屏双缓冲+DMA2d中断方式。但是F429的内部ram只有256K,如果是800x480的屏幕双缓冲最少需要内存为单缓冲(800x480x2)x2=768x2K=1.536M字节,所以想要快速首先选择大容量以及主频较高的MCU,例如H7系列,主频可以到400M以上内存可以到2M。 阅读详情
AI摘要

本文分享了实际项目中Lvgl的优化过程。屏幕移植Lvgl后,切换屏幕等动画时帧率下降。通过驱动验证和Lvgl移植验证,确定使用单缓存、全屏、IPA搬运数据方案。还对guider生成代码优化,减少半透明组件、用滑动页代替容器,帧率显著提升,并给出了屏幕驱动、配置、开发等方面的优化策略。

前言

LVGL: V8.3.10

开发工具:NXP GUI-Guider-1.8.1-GA

MCU:GD32F470ZIT6

屏幕:4.3 寸 tftlcd 480*272 RBG565

触摸: GT911

操作系统:FreeRTOS

本文记录分享一个实际项目中 lvgl 的优化过程。

现象

屏幕移植 lvgl 后帧率 50fps 左右,但是当切换屏幕、容器滑动滑动条(都是动画)时,帧率显著下降到 15fps 左右。

解耦屏幕驱动 lvgl freertos

驱动验证

任务启动调度和 lvgl 初始化之前,运行屏幕驱动测试用例,使用 TLI+IPA 的驱动方案。

测试数据如下:

时钟频率 (MHz)刷全屏时间 (ms)帧率(fps)
1213.4674
917.4757
819.6451

估算数据:

时钟 12MHZ 时,帧率:12000000/(480*272*1.2) ≈ 76 fps

时钟 9MHZ 时,帧率:9000000/(480*272*1.2) ≈ 57 fps

时钟 8MHZ 时,帧率:8000000/(480*272*1.2) ≈ 51 fps

时钟频率 (MHz)帧率 (fps)
1276
957
851

对比实测数据和估算数据,两者基本一致,因此 TLI+IPA 的驱动方案可以驱动屏幕达到各个频率下的最大帧率。

lvgl 移植验证

使用 lvgl 的 demos 测试:brenchmark 验证驱动程序。

lvgl 使用单缓存,全屏,画点填充的测试如下:

lvgl 使用单缓存,全屏,IPA 点填充的测试如下:

从对比看出,IPA 的方案的明显更优。

单缓存非全屏,双缓存非全屏测试时撕裂感较为明显,两者的全屏缓存撕裂感消失。网友说双缓存会更慢,gd32f4 的芯片一般单缓冲就够,暂时放弃双缓存。lvgl 第三种缓存方式为全屏双缓存,省掉了 lvgl 缓存往 TLI 显存搬运数据的过程,通过不断修改 TLI 显存地址实现,撕裂感消失,但是帧率下降为 10fps 左右,并且屏幕闪动(使用了lv_disp_flush_is_last() 检测是最后渲染的块,无好转 )。所有最后 lvgl 使用单缓存,全屏,IPA 搬运数据的方案。

问题分析与解决

验证完驱动和 lvgl,优化的目标应该放在 guider 生成的代码上,brenchmark 显示阴影、文本和半透明度会降低帧率。

brenchmark 的结果显示半透明度组件会降低渲染效率 14%,guider 工程中使用了多处半透明组 LVGL 组件的不同透明度对性能的影响

方案 1:减少半透明组件的数量和使用面积。测试发现帧率有所提升。

容器的滑动条滚动时帧率显著降低,从 50fps 降低到 15fps。相同的功能可以通过列表、滑动页来实现。虽然使用列表组件是最简单的方案,但是项目中的UI设计使用列表难以实现。容器在滚动条方面的优化都不如列表和滑动页。

方案 2:使用滑动页代替容器。测试后帧率不再下降,稳定在 66fps。

选择适用场景描述
列表列表式的内容(如菜单、选项)已经高度优化,默认样式和行为适合大多数列表场景。
滑动页内容复杂且需要大面积滚动滚动优化的通用容器。
容器需要完全自定义内容和布局手动启用滚动功能(如 lv_obj_set_scroll_dir),但性能和滚动行为需要更多调试和优化。

总结

Lvgl 优化策略

  1. 优化屏幕驱动

    1. 应根据屏幕规格书的要求,并结合项目的具体需求(特别是帧率),正确配置屏幕参数(如时钟、脉冲等)。

    2. 建议使用硬件加速功能,例如在 STM32 平台上采用 DMA2D,在 GD32 平台上则可利用 IPA 功能。

    3. 在选择屏幕接口时,应优先考虑并行通信方案(例如使用 RGB 接口替代 SPI 接口,或在使用 SPI 时将其配置为并行模式)。若因条件限制必须采用串行通信,则需确保设置的时钟频率足够高以满足性能需求。

  2. 优化 LVGL 配置

    1. 选择合适的缓存方案(官方的三种)

      1. 大部分场景方案 1+硬件加速就够用

      2. 双缓存的提升有限,但是会占用更多的内存。如果不刷全屏,其性能可能还不如刷全屏的方案 1

      3. 该方案省去了数据从 lvgl 缓存往屏幕显存搬运的过程,只需要修改显存地址。LVGL 有可能会分块刷屏,最好配合 lvgl“检测是否为最后一块内存”的API使用。

    2. 增加缓冲区的大小

    3. 把屏幕显存/lvgl 的缓存尽量放在内部 RAM,内部 RAM 的读写速度比 SDRAM 更快,屏幕显存和缓存都经常访问,最好有更快的读写速度。

    4. 如果数据存储在外部 SDRAM,SDRAM 的驱动配置(读写速率)可能是性能突破瓶颈的关键

    5. 避免显存和缓存都存储在 SDRAM 占用带宽。 如果屏幕显存和 lvgl 缓存都放在 SDRAM,在条件允许的情况下,可以将其中一个放到内部 RAM。

    6. 分配足够的内存,起码大于 48K,最好 96K 以上(用于生成组件等),可以通过开启内存调试的宏定义来判断内存分配是否足够。

  3. 采用 LVGL 的基准测试工具(Benchmark)对显示屏及其 LVGL 驱动程序进行评估,根据结果进行针对性的优化与问题解决。

  4. LVGL 开发优化

    1. 尽量使用完全不透明/完全透明组件

    2. 如果使用半透明组件,尽量减少数量与面积

    3. 使用特定的组件去实现特定的功能有更好的优化效果,比如:相比于容器,滚动条使用列表和滑动页实现会有更好的优化效果

    4. 字体和图片在使用位图方案的时候,尽量避免较大图案和字体,比如全屏背景图和超过 50 字号的字体等

    5. 内存足够的情况下,常用的屏幕在切换时可以保留内存

    6. 减少动画的使用

    7. 简单的屏幕不放置容器效率更高,复杂的屏幕放置容器方便管理和复用

    8. 方形组件减少阴影和倒角效率更高

  5. 提升编译器等级,可以获得更好的显示效果

  6. 选择屏幕时尽量选用硬件方案,软件旋转方案会降低帧率

参考资料

欢迎阅读LVGL中文开发手册! — LVGL 文档

Moticsoft的个人空间-Moticsoft个人主页-哔哩哔哩视频

2-13-4_LVGL-MCU进阶教程之对接显示驱动到LVGL库(再次优化刷新效率)哔哩哔哩bilibili

7节技术精品课:让你的微控制器GUI开发技能从入门到精通!哔哩哔哩bilibili

##

如何一步一步地优化LVGL的丝滑度 经过一番周折将LVGL移植到了STM32F407单片机上,底层驱动的LCD是st7789,移植时的条件和环境如下:●LVGL用的是单缓冲,一次刷新10行;●刷新函数用的是最原始的一个一个打点的方式;●ST7789底层发送数据用的是软件spi;在这些环境下,刷屏就是在拉窗帘,特别慢。接下来,一步一步地进行优化。 阅读详情

相关推荐

如何一步一步地优化LVGL的flash占用

LVGL使用的空间包括内存和Flash。其中,内存分为LVGL管理的内存空间+还有一部分是刷新的缓冲区。如果内存够用,两块空间可以都放到内部RAM,如果内部RAM不够用,就可以将刷新缓冲区放到外部RAM中,然后使用全屏刷新,用空间换时间。而flash也分为两部分,一部分是代码,另一部是是素材文件,一般lvgl使用的素材主要有图片和字体,这些数据稍微多一些就很容易导致内部flash不够用。这种情况下要怎么办呢?这种方式局限性太大。

qq_28576837的博客 7597

LVGL界面卡顿优化总结

前面移植了lvgl到全志r528平台(Linux),但是运行起来界面有些卡顿,当遇到页面切换时帧率能下降到个位数。为此,我查阅了大量资料,咨询了方案厂商,总结出一些优化方案。注意这是针对Linux平台下的优化。

我的博客 9589

LVGL图表性能优化指南:当数据点超过1000个时如何避免卡顿

本文深入探讨了LVGL图表组件lv_chart在处理超过1000个数据点时的性能优化策略。针对嵌入式GUI开发中常见的界面卡顿问题,文章详细解析了其内置的像素级数据压缩算法(如min/max垂直线优化)的渲染机制,并提供了内存分配、样式系统精简、数据更新策略等多方面的实战优化技巧,帮助开发者在资源受限的设备上实现流畅的高密度数据可视化。

omega的博客 675

LVGL 优化帧率技巧

目录标题前文LVGL帧率限制代码优化等级 前文 LVGL——PC模拟器仿真模拟+VS2017 f429 discovery开发版 LVGL移植(带操作系统) 首先就个人用过的几个芯片而言,可能还是要F4系列这种性能以上,跑出来的效果才能让人满意,最常见的103芯片使用场景受限,总体不太好。 在F429平台上尝试LVGL过程中,也总结出几种优化提高帧率的方法。 这里我们还是直接用官方测试例程 benchmark做直观的帧率展示 LVGL帧率限制 首先,LVGL是有一个帧率刷新周期的宏定义,LVGL会通过LVG

无人等人的博客 4万+

【LVGL】学习笔记--(3)界面切换以及显示优化

界面切换和帧率优化

sinat_33408502的博客 1万+

LVGL刷屏优化(基于ESP32)

下面是一张图像文件/图像C array从读取到显示的整个底层路径,有了一个路径,我们就可以依次对每个环节进行优化。 从上图中可以看到,选择RAM还是PSRAM是两条不同的通道。(当然,RAM后可以接CPU,但是有DMA干嘛不用。另外DMA是只有RAM可以使用,在heap_caps_malloc()中设置MALLOC_CAP_DMA)。ESP32中RAM的问题就是容量太小,留给data用的只有320K,对于大屏会有明显刷屏感。 PSRAM可以通过分配大内存,以空间换时间。但是对于大屏,第一张图的加载速度会较慢

qq_40773212的博客 4716

LVGL - RV1109 LVGL UI刷新效率优化-02

使用另一个线程来commit,这样只要在另一个线程中,如是UI线程有调用lvgl_drm_flush 这个后,发送一个消息通知刷新线程drm commit操即可!CPU占用率上,不过明显的上升了,使用单线程方式时,CPU占用率在只在5%上下,使用多线程方式时,CPU平均在15%左右,连续操作甚至50%以上!在跑lv_demo_widgets这个示例时,第二个tab页的 Analytics 界面,能看到仪表盘的每一秒的跳动了,之前的代码是直接跳秒的。因为一直没有真正的应用在产品中,所以也就放下了!

HELLO 5468

[LVGL] 刷新率优化

实验硬件:STM32F407ZGT6;2.4寸TFT-LCD模块(ILI9341驱动芯片、XTP2046触摸芯片)本文目标:lvgl的刷新率优化,解决拉帘子问题注意:本文在LVGL显示触摸代码移植完成的基础上进行,第一次使用lvgl可根据前文一步步移植,点击下方传送门查看相关文章传送门:STM32F4驱动ILI9341的TFT-LCD触摸屏(HAL库)(一)STM32F4驱动ILI9341的TFT-LCD触摸屏(HAL库)(二)[LVGL] 显示代码移植 基于STM32F4。

2301_77117901的博客 2784

【LVGL进阶日记】② LVGL外部字库刷新速度优化

本章介绍了LVGL外部字库刷新速度优化的详细步骤。

量子君的优快云博客 2543

LVGL 多语言实现方案解析与优化

本文深入解析了LVGL嵌入式图形库的多语言实现方案与优化技巧。针对智能手表、工控屏等设备,详细探讨了字体子集化、多字体融合、文本动态切换等核心方法,并对比了经典二维数组、外部资源文件及官方lv_i18n模块等方案的优劣。文章重点提供了内存管理、性能优化及实战避坑指南,帮助开发者在资源受限环境下高效实现多语言界面。

weixin_29190169的博客 324

LVGL在ESP32上的性能优化与调试技巧

本文详细介绍了LVGL在ESP32平台上的性能优化与调试技巧,特别针对ST7789屏幕驱动的性能瓶颈问题。通过内存管理优化、SPI总线调优、渲染性能提升及高级调试方法,帮助开发者实现流畅的UI体验。关键优化包括双缓冲机制、DMA传输和动态刷新率调整,适用于嵌入式图形界面开发。

7h6j5k4l3的博客 999

lvgl性能调优

lvgl_performance 是 LVGL 提供的性能分析工具,可以帮助开发者评估和优化图形库的性能。在一些特定的版本中,lvgl_performance 是一个宏或者工具,用来分析性能瓶颈,特别是图形渲染的效率。确保在 lv_conf.h 配置文件中启用了性能分析。你可以查找或添加以下宏来启用性能工具:此宏将启用性能分析,允许收集渲染和对象管理的时间。在你的代码中,可以使用 lv_performance 来输出渲染性能数据。通常,它会提供每一帧的渲染时间,以及其他相关指标。

weixin_34382392的博客 3097

LVGL V8图片缓存机制优化

LVGL V8图片缓存机制优化,避免出现Nodata 现象

Dazed_peg的博客 2296

优化lvgl减小内存降低

lvgl减小flash

lmlwz123的博客 6189

解决PubMed卡在“正在检查浏览器”页面的完整排查指南

DNS解析是将域名转换为IP地址的基础网络服务,其稳定性和准确性直接影响网站访问。当DNS服务器响应缓慢或返回异常结果时,可能导致客户端与服务器建立连接时出现偏差,从而触发网站的安全验证机制,例如Cloudflare等安全服务提供的浏览器环境检查。这一机制旨在防御恶意流量,但偶尔也会误拦截正常访问。在生物医学信息检索领域,PubMed作为核心文献数据库,其稳定访问对科研工作流至关重要。针对因DNS或本地缓存问题导致的‘正在检查浏览器’页面卡顿,通过刷新DNS缓存、更换为Google Public DNS或C

weixin_29597551的博客 3612

【24届计算机校招】面经汇总

这是笔者为了能够记录一下接下来一段时间会看的一些博客视频等汇总。一是为了汇总后常回来看看,而是为了后面的人在这个阶段准备的时候有个参考。现在已经6月底了,大部分高校的夏令营都出来了,而我至今还是夏0营,前几天还为川大会收双非而感到高兴,但遗憾的是川大并没要我。而我另一位双非的朋友已经拿到offer,在决定去南开还是华师了。没有对比就没伤害,我开始怀疑自己的决策是否正确——这段时间的夏令营我都有关注,但我仅报了少部分的几个酒吧舞,而没有选择海投,我觉得只要我认准了一个东西,我拼尽全力就一定能够获取到。

JehanRio's Private Blog 804

【Linux】linux上使用lvgl

orangepi上使用lvgl

qq_37280428的博客 7735

基于halcon的HSV颜色匹配实例

HSV颜色识别原图代码结果 原图 代码 dev_update_off () dev_close_window () *颜色数组 FuseColors := ['Orange','Red','Blue','Yellow','Green'] *画笔颜色数组 DisplayColors := ['coral','red','blue','goldenrod','forest green'] * HSV模型中H分量: Orange 10-30, Red 0-10,Blue 125-162,Yellow 3

qq_39467811的博客 3544

【花雕学编程】Arduino LVGL 之优化文本显示性能

通过高效的渲染算法、字符缓存机制、字体优化和合理的更新策略,可以显著提升文本显示的流畅性和响应性。在开发过程中,关注资源管理、更新策略和视觉效果的平衡,将有助于构建高质量的用户界面,确保系统的稳定性和用户的满意度。5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。LVGL不仅可以在Arduino上运行,还可以在多个嵌入式平台和操作系统上使用,包括ESP32、STM32、Linux等,具有良好的跨平台性。

雕爷学编程 1202

无刷直流电机计算转速

一个霍尔传感器周期(Tms)有两种模式输出方式(3FG/1FG),一个电周期是6个60°电角度,电机磁极数是P,磁极对数PP = P / 2 3FG模式: 1个电周期= 6 * T 1FG模式: 1个电周期= 2 * T 1秒钟电周期个数: 1分钟电周期个数: 1分钟转速: 举例: 假设电机磁极数是8,3FG模式下,霍尔周期700us,计算该条件下转速 ...

meimiaorenshengqq的博客 9679

FPGA/IC 秋招笔试/面试题总结(目录)

FPGA/IC 秋招笔试/面试题总结-目录介绍 文章目录FPGA/IC 秋招笔试/面试题总结-目录介绍一、FPGA内部资源1. 什么是FPGA2.FPGA内部资源二、同步时钟、同步/异步电路1.同步时钟2.同步/异步电路三、同步复位/异步复位1.同步复位2. 异步复位3. 异步复位同步释放四、同步FIFO/异步FIFO1.同步FIFO2.异步FIFO五、FIFO最小深度计算1.FIFO最小深度2.示例分析六、逻辑电平1.TTL电平标准2.LVTTL电平标准3.CMOS电平标准4.LVCOMS电平标准5.RS

Crazzy_M的博客 2万+

vscode_cmake_stm32_lvgl移植及显示优化

1 LVGL移植 本文使用的环境如下: STM32H743 FreeRTOS st7789 lcd(320*240) 下载LVGL源码,本文使用Release v9.1.0; 将压缩包解压到工程目录,例如stm32h7xx_cmake_project/components/lvgl-9.1.0,如下所示: ...

Salted fish in hand, I have the world. 2031

基于Simulink的柔性关节人形机器人振动抑制控制仿真

本文完成了基于Simulink的柔性关节人形机器人振动抑制控制仿真,实现了:✅ 建立二质量柔性关节动力学模型✅ 设计加速度反馈主动阻尼控制器✅ 对比陷波滤波与状态反馈效果✅ 验证大幅运动下的快速振动衰减能力✅ 为高动态人形机器人操作(如击掌、搬运)提供平滑执行基础。

xiaoheshang_123的博客 129

lvgl白屏问题(LCD长时间白屏)和优化lvgl

总结下来,其实就几点:1、失能lvgl不必要的部件;2、尽可能使用绘制来代替图片;3、实在没法绘制的小图标就直接使用图片;另外,还可以直接弄一个写flash工程,将不经常刷新的图片素材写到外部flash中,为什么要单独弄一个呢?因为直接在工程里写flash,容易导致每次烧录程序都要写一遍。其实还有个方式,那就是开启keil的优化等级,只不过这种情况下需要注意一些变量的volatile处理,而且优化也并不明显,能大概下降个二三十k吧。

m0_71813740的博客 2578

如何在MacBook上安装部署原生openclaw

本文介绍了在MacBook上安装OpenClaw的详细步骤:首先通过curl或国内镜像源安装nvm和Node.js(版本≥22),然后使用nvm安装Node.js 24并验证安装。接着通过脚本快速安装OpenClaw,完成安装后选择Qwen作为AI模型并进行OAuth认证。配置过程中可跳过联网搜索和Agent技能设置,最后选择Web界面作为呈现方式。安装完成后,系统会启动openclaw-gateway进程并打开Web界面,用户可通过简单的"hello"指令开始与AI对话。目前基础功能已

木简熙的博客 809

使用 Visual Studio Code 搭建 SAP UI5 本地开发环境

工欲善其事,必先利其器。时至今日,SAP 提供了非常多的 SAP UI5 开发工具,既包含本地搭建的,也包含浏览器里远端使用的工具,比如 WebIDE 和 Business Application Studio. 我们访问下面这个链接,就能找到所有这些工具的安装或者配置步骤: https://tools.hana.ondemand.com/#sapui5 如果想选择本地开发,SAP 推荐的工具是 Visual Studio Code,也就是本文要介绍的内容。 也可以下载 WebIDE 的本地安装包,将其安

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1万+
上一篇: RSA算法进行 数据加解密 与 数字签名、哈希(Hash) 摘要
下一篇: 超详细的GD32展频配置
飞鸟o
博客等级 码龄3年 1094粉丝 22原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值