关于lvgl “lv_img_dsc_t”结构体使用的疑问、并行刷新图片思路

环境说明:

freertos、esp32s3、lvgl 、素材存在emmc中     

并行刷新图片思路:
思路概括:将load和显示分别放在两个task和两个核心中;

load任务:将emmc中的图片通过文件系统api读取到psram中;

显示任务:将load好的数据显示出来;

“lv_img_dsc_t”结构体使用的疑问:

我创建了lv_img_dsc_t类型的一个数组变量lv_img_dsc_t bg_layer_image_descs[current_idx_bg];current_idx_bg大小为2,然后遍历显示9张图片数据,通过不断的切换current_idx_bg(0,1,0,1)去显示遍历好的新数据(0,1,2,3,4,5,6,7,8),但是发现只有前面两张数据是正常的,后面显示的图片大致也可以看出整体样貌,但是会有一点一点的白色,后面我尝试把current_idx_bg改成9,跟需要显示的图片张数一致,就正常了;这就使我非常不能理解了,lv_img_dsc_t结构体中的无论是数据还是其它描述符我都在load任务中实时更新,然后显示任务才去显示的,为什么会有这个问题?

2025/03/17_12:43更新:

解决方案:在使用lv_img_set_src显示前加入lv_img_cache_invalidate_src强制刷新 lvgl 缓存问题得到了解决,白色点点消失了。

原因:lvgl可能会在 lv_img_set_src() 之后进行缓冲,如果 data 指针指向的缓冲区在 display 任务中已经被 load 任务覆盖,而 lvgl 仍在使用它,就会导致白点或数据错误。lv_img_cache_invalidate_src API 解决了 lvgl 可能仍然缓存着旧 lv_img_dsc_t 数据的问题。

可能引发的问题:?

ps:如果有不对的地方希望可以评论区提出来,谢谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值