项目配置

我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那一栏、还有注释全删了就能正常烧录。很奇葩,为啥要这样才行,真是困扰了一段时间,主要我还没在官方文档中找到这样的信息(找到的同学可以发评论区里面),痛苦的一。

改进后的分区表文件:

注意:

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

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐