发新帖本帖赏金 50.00元(功能说明)我要提问
返回列表
打印
[活动]

【APM32F411V Tiny Board测评】 LVGL 提速-篇章1

[复制链接]
805|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 [鑫森淼焱垚] 于 2024-5-30 10:48 编辑

速度瓶颈

前面的章节移植 LVGL 成功,但是刷屏速度很慢,无论是 FreeRTOS 版本还是 Baremetal 版本,速度差不多。所以问题出在哪里呢?
移植 LVGL部分需要实现一个刷屏函数,把 LVGL 内存刷到显示屏上,如下代码所示:

这里调用了 LCD_DrawPoint() 函数,一个点一个点把像素绘制到屏幕上。这个函数实现如下:

其中的 LCD_Address_Set() 函数实现如下,每次绘制一个像素点都会设置像素点的坐标,每一行代码都需要调用 SPI 发送数据,太慢了。


提速方式

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

修改 disp_flush() 调用 LCD_DrawBitmap() 函数,如下图所示


结果

此种填充数组的方式 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 内存刷到显示屏上

使用特权

评论回复
发新帖 本帖赏金 50.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

98

帖子

0

粉丝