这两天在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打开:
先说解决方案:
解决方案
将 lv_conf.h中的
# define LV_MEM_SIZE (32U * 1024U)
把32改大(要确保你单片机的内存是否够)
如果使用了lvgl_esp32_drivers,则在menuconfig中:(默认32,单位KB
)
寻找过程
先给不太懂LVGL的新手科普一点,lv_conf.h是lvgl的配置文件,然而假如你使用了官方的,lvgl_esp32_drivers库,那么是不用管这个文件的,即使你把这个文件启用(设为1),还是没有用, lvgl_esp32_drivers已经将所有的设置项都搬到了menu config里面,只用在那里面设置就行了。(不过每改一次设置都要从头编译,真的很痛苦)
我先是以为是自己图片文件的问题,我去把官方的测试图片放进去依旧不行,但是电脑模拟器是可以的
然后我以为是文件系统的问题,换了文件系统还是不行
然后debug的话,首先要把LVGL的log打开
这里是不同的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秒。
文件系统移植教程: