解决ESP32 LVGL无法显示图片,显示No data的问题

这两天在ESP32 IDF上移植了LVGL8.2,LVGL8.2已经内置了decoder,不需要再安装额外的库。但是,

    lv_obj_t * wp;
    wp = lv_img_create(DictSense);
    lv_img_set_src(wp, "S:/ALBUM/wink.png");

将文件系统移植好后,把decoder打开:
解决ESP32 LVGL无法显示图片,显示No data的问题_第1张图片
“No data”
先说解决方案:

解决方案

将 lv_conf.h中的

#  define LV_MEM_SIZE    (32U * 1024U)

把32改大(要确保你单片机的内存是否够)
如果使用了lvgl_esp32_drivers,则在menuconfig中:(默认32,单位KB请添加图片描述

解决ESP32 LVGL无法显示图片,显示No data的问题_第2张图片
解决ESP32 LVGL无法显示图片,显示No data的问题_第3张图片

寻找过程

先给不太懂LVGL的新手科普一点,lv_conf.h是lvgl的配置文件,然而假如你使用了官方的,lvgl_esp32_drivers库,那么是不用管这个文件的,即使你把这个文件启用(设为1),还是没有用, lvgl_esp32_drivers已经将所有的设置项都搬到了menu config里面,只用在那里面设置就行了。(不过每改一次设置都要从头编译,真的很痛苦)

我先是以为是自己图片文件的问题,我去把官方的测试图片放进去依旧不行,但是电脑模拟器是可以的
然后我以为是文件系统的问题,换了文件系统还是不行

然后debug的话,首先要把LVGL的log打开
解决ESP32 LVGL无法显示图片,显示No data的问题_第4张图片
这里是不同的log等级,假如你开的最低级,他每一个事件都会报告,直接把esp32 CPU占满而基本无法运行 ,我选的是第2个等级,终于log出来了一点信息(只有打开错误这一句话)

但是没有关键信息,只是说错误代码是 LV_RES_INV

于是我又在绘图decode函数里面看了好长时间,不知道点到了什么,终于把关键信息给log出来了
动态分配内存的大小不够了啊!(调出这个log,用了一天的时间,我也不知道为什么开始没有log出内存不够这个信息)
原来如此!!!

在这里插入图片描述

关于文件系统

关于文件系统:其实esp32 IDF的文件系统是不用移植的,官方就兼容STDIO。直接把官方的SD卡例程的初始化复制进去 然后把LVGL的文件系统选择STDIO,配置一下即可。但是速度会比FATFS慢太多太多,还是建议使用lv_fs_if库。同样一个项目用if简直是秒出,用STDIO要等3秒。
文件系统移植教程:
https://blog.csdn.net/cnicfhnui/article/details/118972851

你可能感兴趣的:(单片机,嵌入式硬件)