硬汉嵌入式论坛

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

[LVGL] LVGL缓存只使用1/4大小的时候遇到横纹?

[复制链接]

4

主题

5

回帖

17

积分

新手上路

积分
17
发表于 2024-10-9 16:08:24 | 显示全部楼层 |阅读模式
由于ram有限,所以给lvgl的缓存是lcd总缓存的1/4大小,上下翻动的时候没有什么大问题,但是一旦左右翻动,在1/4处总是容易看到横纹,有什么办法优化这里吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116223
QQ
发表于 2024-10-10 09:05:23 | 显示全部楼层
初步判断了你说的这个应该是撕裂,如果是撕裂这个无法去掉。

虽然部分网友研究了这类LCD的TE同步信号,但效果一般,只能简单缓解,换个应用代码就不好使了。

或者你调整下你的代码来改版更新页面速度,也会有所改善。
回复

使用道具 举报

4

主题

5

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2024-10-10 10:30:19 | 显示全部楼层
本帖最后由 desmond 于 2024-10-10 11:18 编辑

重复了                       
回复

使用道具 举报

4

主题

5

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2024-10-10 10:42:14 | 显示全部楼层
应该是你说的撕裂,跑的是官方demo,在柱状图的页面左右滑动,撕裂最明显,就是垂直的柱体有位移发生.
硬件传输速度本身是可以到48fps的, 用上freertos+lvgl后,如果单全ram缓冲的话,也不会发生这种撕裂,只是ram必须只能有限使用,所以缩减到1/4缓冲大小.
然后就发生了撕裂现象,4次刷新耗时也变成了80ms左右(本来单全缓冲,一次刷新只有23ms左右的),即便缩小LV_DISP_DEF_REFR_PERIOD值,总时间还是无法缩小下去,
这种应该是任务调度引起的吧?是否有办法针对这种全屏刷新,在没有刷新完毕的情况下禁止任务调度呢?
回复

使用道具 举报

11

主题

130

回帖

168

积分

初级会员

积分
168
发表于 2024-10-10 14:02:33 | 显示全部楼层
倒不是任务调度引起的。这种部分刷新原理可以这样理解,需要刷一整屏,以1/4屏高度去扫描,每次刷新1/4屏,分4次刷新完成。这个过程实际计算了4次需要绘制的UI控件,但每次都是落在扫描区域的才会去更新。
所以部分刷新可以解决内存不足的问题,但是代价就是计算量增加和整屏刷新周期的延长。
回复

使用道具 举报

4

主题

5

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2024-10-11 19:55:15 | 显示全部楼层
有梦为马 发表于 2024-10-10 14:02
倒不是任务调度引起的。这种部分刷新原理可以这样理解,需要刷一整屏,以1/4屏高度去扫描,每次刷新1/4屏, ...

所以说这里如果mcu计算能力或者图像加速能力跟不上的话,这里的慢就必定是硬伤了,是这样子理解的吗?
回复

使用道具 举报

3

主题

425

回帖

434

积分

高级会员

积分
434
发表于 2024-10-11 22:48:17 | 显示全部楼层
如果你的cpu够强,试试看用两个1/8帧缓冲做双缓存模式,这样前后台缓存交换使用,dma传输buf1时,渲染buf2;dma传输buf2时,渲染buf1;如此交替。这样就像2级流水线一样可以减少许多等待渲染的时间。
lvgl原生支持这样的双缓存模式。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 11:32 , Processed in 0.297315 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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