起因
在使用esp32c3进行开发的过程中,使用了esp/esp-idf/examples/…中的softAP示例代码为基础,进行代码的添加扩展,
在代码中需要储存整数变量,
使用nvs_flash_init、nvs_get_i32、nvs_close等函数(非易失性存储库)可以储存整数
之后由于esp32c3需要从ap模式转换为sta模式,因此在ap模式中搭建了tcp server来接收ssid、password数据,接收后就需要将数据保存起来,因而使用到了磨损均衡API
解决
根据文档描述找到可用的示例
于是将wear_levelling示例代码中关于FatFs的相关代码合理添加进我的项目代码中,但是在运行过程中报错:
此处报错是在运行到以下函数产生的:
报错原因:分区表不包含具有给定标签的FATFS分区
此处又关于分区表之类的问题,作为一个渣渣我也很蒙逼,要完全搞懂分区表的内容又要花费很大的精力,于是没有去死抓分区表
于是将自己的工程 menuconfig 与 wear_levelling中的menuconfig 进行比较
发现了两处不同之处:
1.
2.
更改后如图所示:
保存配置后退出
本以为大功告成,结果在编译时报错如下:
在编译时缺少了文件 partitions.csv ,想着肯定是与分区相关的文件
并在示例工程wear_levelling中找到了 类似文件partitions_example.csv
文件内容如下:
于是直接把partitions_example.csv 复制到我的工程中,再次尝试编译还是相同的错误
之后在build/build.ninja文件中搜索 partitions相关内容(/partitions +回车)
找到内容如下:
并在wear_levelling工程中build/build.ninja文件同样搜索,得到结果如下:
原来是两个工程编译过程中对于该文件的引用名称不同,
于是将我的工程中复制过来的partitions_example.csv 改名为 partitions.csv
再次尝试编译,成功编译,且成功运行
运行后正常挂载,但在储存时调用fopen()打开文件时报错,
不能打开文件进行写入,经过长时间验证,
想着会不会是示例代码为hello.txt,我的为sta_address.txt,文件名字的问题导致错误
于是将sta_address.txt 改为 address.txt 后可正常打开,确实为文件名的原因
之后再次测试是否为下划线的原因:
将文件名改为 staaddress.txt再次fopen()出错,
但是再次改为sta_adr.txt又正常
结论:fopen()出错的原因在于文件名,但不是由于下划线,可能是.txt前的名字不能过长.
后来又发现开发文档中存在nsv_get_str()函数,想着只是存小字符串应该用这个就够了,不需要使用fatfs了,花费了两天时间在fatfs运用,但是之后要存储大量数据还是用得着的,也是学习到了一些东西