【已解决】关于nvs_get_str读数据串经常失败的问题

ming191
Posts: 46
Joined: Mon May 31, 2021 6:27 am

【已解决】关于nvs_get_str读数据串经常失败的问题

Postby ming191 » Wed Mar 22, 2023 3:43 am

版本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.

ESP_WangYX
Posts: 89
Joined: Mon Jun 28, 2021 12:48 pm

Re: 关于nvs_get_str读数据串经常失败的问题

Postby ESP_WangYX » Tue Mar 28, 2023 7:20 am

对于变长数据,请参考这里的说明 https://docs.espressif.com/projects/esp ... PcP6size_t,先获取长度,再查询数据内容。

ming191
Posts: 46
Joined: Mon May 31, 2021 6:27 am

Re: 关于nvs_get_str读数据串经常失败的问题

Postby ming191 » Fri Mar 31, 2023 3:50 am

这个方法,我按照里面的例程,先获取了句柄的具体长度。但是最后读出来的数据是错误的。。。。

Who is online

Users browsing this forum: No registered users and 17 guests