[ESP-IDF]项目版本5.2.5迁移至5.4.0时遇到的小问题
总结一下自己在项目迁移中遇到的小问题。
项目配置
我5.2.5项目配置了spiffs文件系统、LVGL8库、使用了SPI接口,芯片是ESP32-S3。
我项目在迁移时主要也就是需要关注这三个方面,ESP-IDF的改动。
问题描述以及解决方法
代码语法问题
在5.2.5版本中,我使用了以下语句没有问题,但到5.4.0版本后,语法就不能使用了。
源代码:
DIR *dir;
struct dirent *entry;
while((entry = readdir(dir) != NULL)){}
报错:
error: assignment to 'struct dirent *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
49 | while((entry = readdir(dir) != NULL))
| ^
错误分析:
直译过来是需要添加强转符,但是readdir返回值喝entry的类型是一直的,所以我推断报错有问题,仔细看的话加个小括号应该就可以了,事实也确实如此。
更改后的代码:
while((entry = readdir(dir)) != NULL){}
这样就能成功编译了,但是我不懂,这不应该是C语言的问题吗,怎么会和ESP-IDF的版本挂钩。
烧录问题
准确来说我不知道这是不是烧录的问题,因为最终错误定格在了分区表文件上,查询官方文档,也没有发现有说这方面有改动。
问题描述:
在工程编译的时候编译了我所有分区(4个分区),但是烧录的时候只烧录了两个分区(nvs、pyh_init分区),其他分区并没有被烧录,截图如下。我原本在ESP-IDF5.2.4版本中能够正常烧录四个分区,没有任何问题,但迁移到5.4.0版本就出现了这样的问题。
编译工程:

烧录:

分区表文件:

问题分析:
从三张截图可以看出,分区表文件没问题,编译工程也没问题,就是在烧录的时候只烧录了两个分区。我又尝试了官方例子中的分区文件,发现能正常烧录,没有问题,那么最终问题就在我的分区表文件中。
解决方案:
经过多次尝试,发现只需要将Flags那一栏、还有注释全删了就能正常烧录。很奇葩,为啥要这样才行,真是困扰了一段时间,主要我还没在官方文档中找到这样的信息(找到的同学可以发评论区里面),痛苦的一。
改进后的分区表文件:

注意:
在版本迁移的时候有时候需要重新配置项目,有时候不用,如果你在迁移时发现各种奇怪问题,可以看一下项目是不是需要配置。
更多推荐



所有评论(0)