LVGL 性能优化指南
发布于 2025年11月12日
LVGL 性能优化指南
一、屏幕驱动优化
- 优先启用硬件加速:STM32 平台推荐使用 DMA2D,GD32 平台可利用 IPA 功能,减少 CPU 占用。
- 优化屏幕接口选型:优先采用并行通信方案(如 RGB 接口),替代 SPI 接口;若使用 SPI,建议配置为并行模式提升传输速率。
二、LVGL 配置优化
1. 缓存方案选择(官方三种方案适配)
- 单缓冲 + 硬件加速:适配大部分场景,够用且内存占用低,性价比最高。
- 双缓冲方案:性能提升有限,但会占用更多内存;若不涉及全屏刷新,实际效果可能不及单缓冲(全屏刷新场景)。
- 显存地址直接映射:省去 LVGL 缓存到屏幕显存的数据搬运过程,仅需修改显存地址,效率最高。
2. 缓冲区与内存优化
- 优先分配内部 RAM:将屏幕显存、LVGL 缓存尽量放置在内部 RAM,其读写速度远高于 SDRAM,适配高频访问场景。
- 优化 SDRAM 配置(若使用):若需存储在外部 SDRAM,需重点优化驱动读写速率,避免带宽瓶颈。
- 分离显存与缓存存储:若两者均需用 SDRAM,条件允许时将其中一项迁移至内部 RAM,减少带宽占用冲突。
- 保证足够内存分配:预留至少 48K 内存(推荐 96K 以上),用于组件生成等操作;可通过开启内存调试宏定义,判断内存分配是否充足。
三、LVGL 开发优化
- 组件透明度控制:尽量使用完全不透明 / 完全透明组件;若需半透明效果,需减少组件数量与显示面积(避免过度混合计算)。
- 组件选型适配:优先用专用组件实现功能(如滚动类需求用列表 / 滑动页,替代通用容器),优化渲染效率。
- 资源轻量化:位图模式下,避免使用超大图案(如全屏背景图)和超大字号(超过 50 号的字体),减少显存占用与绘制耗时。
- 页面缓存策略:内存充足时,可保留常用页面的内存占用,避免切换时重复创建 / 销毁,提升切换速度。
- 动画使用克制:减少不必要的动画效果,复杂动画会增加 CPU 计算与渲染开销。
- 容器使用原则:简单页面无需放置容器,提升绘制效率;复杂页面合理使用容器,兼顾管理便利性与复用性。
- 方形组件优化:减少阴影、倒角等装饰效果,降低绘制复杂度,提升帧率。
- 编译器优化:提升编译器优化等级(如 GCC -O2/-O3),优化代码执行效率。
- 屏幕选型建议:优先选用支持硬件旋转的屏幕,软件旋转方案会显著降低帧率。