返回列表 发新帖我要提问本帖赏金: 50.00元(功能说明)

[活动] 【APM32F411V Tiny Board测评】 LVGL 提速-篇章1

[复制链接]
 楼主| [鑫森淼焱垚] 发表于 2024-5-25 15:57 | 显示全部楼层 |阅读模式
本帖最后由 [鑫森淼焱垚] 于 2024-5-30 10:48 编辑

速度瓶颈

前面的章节移植 LVGL 成功,但是刷屏速度很慢,无论是 FreeRTOS 版本还是 Baremetal 版本,速度差不多。所以问题出在哪里呢?
移植 LVGL部分需要实现一个刷屏函数,把 LVGL 内存刷到显示屏上,如下代码所示:
dab0790dfc35382c6f358b0d2cdb9d5d
这里调用了 LCD_DrawPoint() 函数,一个点一个点把像素绘制到屏幕上。这个函数实现如下:
4ef1c4d7855b1a27d7cdc5055b9bc3ab
其中的 LCD_Address_Set() 函数实现如下,每次绘制一个像素点都会设置像素点的坐标,每一行代码都需要调用 SPI 发送数据,太慢了。
9362c4d340c4d7ba1a8571d1f997cb55

提速方式

想办法减少重复工作,减少 SPI 发送数据次数。还是考虑 LCD_Address_Set() 函数,设定行列地址,直接把 LVGL 需要显示的矩形位置设置一次就行,然后直接疯狂往 LCD GRAM 写数据即可。开干。
增加一个API,这个 API 只在一开始设置矩形坐标,然后疯狂往 GRAM 发送数据。
43c2a7b1074578cc688000b3280f9300
修改 disp_flush() 调用 LCD_DrawBitmap() 函数,如下图所示
078b0e609f8dbf8dfcff6b261d9f4694

结果

此种填充数组的方式 FPS 能到 25 FPS。
之前画点的方式 FPS 能到 5 FPS。
速度差异挺明显的,现在看着很丝滑。
视频地址:https://www.bilibili.com/video/BV1zx4y1n7sb/?vd_source=8f2bbf56b70c541bec2ea0b9f102ebee

打赏榜单

Gfan 打赏了 50.00 元 2024-07-17
理由:APM32F411V Tiny测评活动优质测评帖

星辰大海不退缩 发表于 2024-6-22 20:47 | 显示全部楼层
移植 LVGL部分需要实现一个刷屏函数,把 LVGL 内存刷到显示屏上
linyu0395 发表于 2025-5-14 13:15 | 显示全部楼层
你这样子还是慢  spi必须结合DMA   
逆鳞风暴 发表于 2025-5-15 10:16 | 显示全部楼层
这个提速效果确实很明显,25 FPS相比5 FPS,用户体验提升了一个档次。视频里的显示效果看起来非常流畅。
和谐智者 发表于 2025-5-16 23:44 | 显示全部楼层
这么优秀的MCU都领先我一年玩得这么好了!
羡慕啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

127

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

20

主题

127

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部