完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
版本V5.0.1,我利用了NVS保存了WiFI的密码和账号,但是我发现经常读不成功地。我看了一下例程,我发现例程只是读某一个BYTE的数据,nvs_get_u8 例如这个读BYTE的接口,是正确的。多次读写都容易成功。但是利用 nvs_get_str 这个读字符串,经常读不出来的,会经常报一个错误 (ESP_ERR_NVS_INVALID_LENGTH)。但是神奇的是,我只要在读前面加上判断,利用printf输出某些信息,然后调用 nvs_get_str 就能读成功,估计这个接口有BUG。你们可以试试。(PS:我曾经尝试在读之前加了延时函数。发现没什么用。)
esp_err_t err; err = nvs_open("storage", NVS_READWRITE, &my_handle); if( err != ESP_OK ) printf("Error (%s) opening NVS handle!n", esp_err_to_name(err)); else printf("Flash_Write_str open flash succes.n"); Last edited by ming191 on Fri Apr 07, 2023 1:30 am, edited 1 time in total. |
|
相关推荐
1个回答
|
|
根据您提供的信息,您在使用 ESP-IDF 的 NVS 组件时遇到了 nvs_get_str 函数读取字符串数据失败的问题。这个问题可能是由以下几个原因导致的:
1. **数据未正确写入**:在使用 nvs_set_str 写入字符串时,可能由于某些原因(如写入过程中的异常、电源问题等)导致数据未正确写入 NVS。 2. **数据损坏**:NVS 存储的数据可能因为硬件故障、电源问题等原因而损坏。 3. **读取参数错误**:在使用 nvs_get_str 时,可能传入了错误的参数,如长度参数不正确。 4. **内存问题**:ESP32 的内存可能不足以存储大量数据,导致数据读取失败。 5. **软件BUG**:您提到的“估计这个接口有BUG”,这是一个可能性,但需要进一步验证。 为了解决这个问题,您可以尝试以下方法: 1. **确保数据正确写入**:在写入数据后,立即读取并验证数据是否正确。 2. **检查硬件和电源**:确保硬件和电源稳定,避免数据损坏。 3. **使用合适的参数**:在使用 nvs_get_str 时,确保传入的参数正确,特别是长度参数。 4. **增加内存管理**:检查您的应用程序是否占用了大量内存,尝试优化内存使用。 5. **更新ESP-IDF版本**:您当前使用的是 V5.0.1 版本,可以尝试升级到较新的版本,看看问题是否得到解决。 6. **调试和日志**:在读取数据前后添加调试信息和日志输出,以便更好地了解问题所在。 7. **联系ESP-IDF社区**:如果问题仍然存在,您可以联系 ESP-IDF 社区或提交一个 issue,以便开发者能够了解并解决这个问题。 最后,您提到的“在读前面加上判断,利用printf输出某些信息,然后调用 nvs_get_str 就能读成功”,这可能是由于某些外部因素(如硬件状态、内存状态等)在执行 printf 后发生了变化,导致 nvs_get_str 成功读取数据。但这并不是一个可靠的解决方案,建议您按照上述方法进行排查和解决。 |
|
|
|
只有小组成员才能发言,加入小组>>
358 浏览 0 评论
1202 浏览 1 评论
591浏览 6评论
485浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
468浏览 5评论
467浏览 4评论
445浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-31 02:29 , Processed in 0.766448 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号