硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1546|回复: 11
收起左侧

[LVGL] 一种lvgl优化方法(探讨)

[复制链接]

24

主题

122

回帖

194

积分

初级会员

积分
194
发表于 2023-8-20 17:36:47 | 显示全部楼层 |阅读模式
影响LVGL刷新率的因素主要有两个:
1-MCU主频速度。
2-存储器访问速度。

LVGL在渲染过程中会涉及到很多内存拷贝操作。可以用lv_memcpy, 也可以用标准的memcpy。
所以如果能提高点内存拷贝速度,对刷新率是有帮助的。

M33平台下对标准memcpy和汇编实现的内存拷贝做了比较测试。800*480的显存拷贝
1-标准mencpy(IAR最高优化):17ms
2-汇编拷贝:12ms

说明数据量比较大时,汇编拷贝有点优势。

将汇编拷贝函数直接代替标准memcpy函数,由LVGL调用,测试发现刷新率会略有提高。但不是特别明显。

窗口组件多的时候,LVGL就是个吞资源怪兽,普通的MCU很难胜任。即使主频上去了,SDRAM也会是个瓶颈。小尺寸屏还可以。


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106938
QQ
发表于 2023-8-21 00:50:29 | 显示全部楼层
DMA2D做复制粘贴,比CPU快。

要正确的认识到一点,对于F429来说,F429使用DMA2D比使用CPU来刷有一定加速效果的
https://www.armbbs.cn/forum.php? ... 1121&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

24

主题

122

回帖

194

积分

初级会员

积分
194
 楼主| 发表于 2023-8-21 12:12:49 | 显示全部楼层
华芯微特SWM34的DMA2D太慢,解放cpu是可以,但加速lvgl的渲染无用,对于这些串行工作,这样的DMA2D只会拖累FPS。
对于渲染,DMA2D应该是起到缓解CPU算力不足的作用,如果只会更慢,只能关了
回复

使用道具 举报

29

主题

231

回帖

318

积分

高级会员

积分
318
发表于 2023-8-22 08:45:27 | 显示全部楼层
鼓鼓劲,挑战GUIX,放弃lvg
回复

使用道具 举报

5

主题

165

回帖

180

积分

初级会员

积分
180
发表于 2023-8-22 10:56:39 | 显示全部楼层
SWM34我只知道主频是150M,不知道他sdram的时钟源是从主频2分频出来的还是有单独的分频器,如果是主频分出来的那sdram速度就很慢了
然后sdram突发传输大小对速度会有一点影响,一般我是直接配到最大

降低色彩深度对提升显示帧率也有帮助,比如从RGB888降到RGB565以后数据量少了一倍,这样不管是memcpy还是dma都不会太花时间,PS:我个人觉得除非选的屏幕本身素质够好,颜色准确不偏色,不然的话用RGB888可能意义不大

实在不行就只有给内核超频了,超个30%应该没问题
回复

使用道具 举报

5

主题

165

回帖

180

积分

初级会员

积分
180
发表于 2023-8-22 10:59:48 | 显示全部楼层
对了还有个点忘说了,之前在一个地方看到说是把lvgl的那些高级效果关掉也能提升一些帧率,比如阴影和动效之类的,那些对内核算力要求比较高
回复

使用道具 举报

24

主题

122

回帖

194

积分

初级会员

积分
194
 楼主| 发表于 2023-8-22 13:28:18 | 显示全部楼层
DX3906 发表于 2023-8-22 10:59
对了还有个点忘说了,之前在一个地方看到说是把lvgl的那些高级效果关掉也能提升一些帧率,比如阴影和动效之 ...

谢谢指点。超频对UI没帮助。SWM34的时钟树有点简陋,不能细分频。这样的化flash和sdram时钟都会受到影响。测试了一下,保证SDRAM不分频的话,室温下主频能到160M,再高SDRAM就要二分频了
回复

使用道具 举报

24

主题

122

回帖

194

积分

初级会员

积分
194
 楼主| 发表于 2023-8-22 13:30:53 | 显示全部楼层
guoxiang 发表于 2023-8-22 08:45
鼓鼓劲,挑战GUIX,放弃lvg

是的,有jpg硬解码的话,GUIX确实不错,侧重于贴图而不是渲染。就是驱动代码太罗嗦,很难入门做项目。
回复

使用道具 举报

24

主题

122

回帖

194

积分

初级会员

积分
194
 楼主| 发表于 2023-8-28 10:29:38 | 显示全部楼层
小结:决定FPS帧率的主要因素。
1 - MCU主频,越快越好。
2 - SDRAM带宽,MCU挂SDRAM方案,这点会是个瓶颈,读写速度都不会太快。
3 - 2D图形加速器,做渲染必备。

以SWM34挂LVGL为例,测试了几种方案。屏幕分辨率640480,主频150MHz, 所有GUI缓冲均设置在外部SDRAM。
1 - 主频超频到160MHz,拷贝,旋转几个量化指标都会有所提高。但不建议这么做。
2 - 降低SDRAM时钟频率,速度衰减会很严重。
3 - 将显示缓冲区设置在内部RAM,即图像数据流为CPU->SRAM->SDRAM,拷贝旋转速度提升明显,但因为内部SRAM空间太小,做局部刷屏可以,但对整屏的滑屏操作无帮助,拉帘明显。
4 - SWM34有DMA2D硬件却无加速功能。对FPS无帮助。

最终优化后的方案如下:
1 - 单缓冲整屏刷新,LVGL的显示缓冲区设在SDRAM。
2 - 不启用DMA2D。flush函数中人工做memcpy拷贝或软件旋转,写入真正的显示framebuf。通过完全堵塞lvgl线程,规避拉帘。如果是旋转,可以逐行先memcpy到内部SRAM,再旋转到SDRAM,速度会有小量的提升。
3 - 单屏少放点组件。
4 - 图片预拷贝,解码,放到SDRAM。

最终测试结果为:对于RGB565. 静态刷新率=15-17,全屏滑屏最小FPS能维持在10以上。对于这种150M的简易版SOC芯片,基本上做到了实用化。




回复

使用道具 举报

5

主题

35

回帖

50

积分

初级会员

积分
50
发表于 2023-8-28 15:43:31 | 显示全部楼层
感谢分享,他们之前说800x480能到10fps,看来还是有一些优化才能达到
回复

使用道具 举报

2

主题

58

回帖

64

积分

初级会员

积分
64
发表于 2023-8-29 09:38:33 | 显示全部楼层
yxydoctor 发表于 2023-8-28 10:29
小结:决定FPS帧率的主要因素。
1 - MCU主频,越快越好。
2 - SDRAM带宽,MCU挂SDRAM方案,这点会是个瓶 ...

150Mhz主频的话你的SDRAM分频只能二分频吧?是不是拉低了SDRAM的速度?还是说你SDRAM时钟没有分频直接150Mhz?
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-9-5 13:37:49 | 显示全部楼层
非常不错,正好给我做参考。我说为啥我的GUI跑的这么慢!怀疑自己的代码问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-11 04:21 , Processed in 0.182056 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表