本帖最后由 [鑫森淼焱垚] 于 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
|