环境说明:
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:如果有不对的地方希望可以评论区提出来,谢谢~

2万+

被折叠的 条评论
为什么被折叠?



