完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
软件环境:ESP-IDF v4.3
硬件环境:esp32_c3 编译环境:linux 需求描述:我现在有一条名单(结构体类型),调用nvs_set_blob()存储了第一条名单,然后我在运行过程中是会添加新的名单进来的,有什么办法可以将这条新添加的名单存储在第一条名单后面,也就是连续存进flash里面? 我目前没找到哪个nvs的api函数可以按偏移量来操作flash,都是声明了一个nvs_handle的句柄来操作的,但我要是第二条数据又操作该句柄,显然第一条名单数据就被覆盖了;且运行中名单可能有很多个,每个都声明一个句柄也显然不行。 麻烦指导一下,谢谢。 |
|
相关推荐
1个回答
|
|
在ESP-IDF v4.3中,使用NVS(Non-Volatile Storage)API实现连续存储的方法如下:
1. 首先,确保你已经包含了必要的头文件: ```c #include "esp_err.h" #include "nvs_flash.h" #include "nvs.h" ``` 2. 初始化NVS存储: ```c esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); } ESP_ERROR_CHECK(ret); ``` 3. 定义一个结构体来表示名单: ```c typedef struct { // 根据你的实际需求添加成员变量 int id; char name[50]; } NameList; ``` 4. 创建一个NVS命名空间: ```c nvs_handle_t my_handle; const char *namespace_name = "name_list"; ret = nvs_open(namespace_name, NVS_READWRITE, &my_handle); ESP_ERROR_CHECK(ret); ``` 5. 存储第一条名单: ```c NameList first_name = {1, "First Name"}; size_t first_name_size = sizeof(first_name); ret = nvs_set_blob(my_handle, "first_name", &first_name, first_name_size); ESP_ERROR_CHECK(ret); ``` 6. 在运行过程中添加新的名单并存储: ```c NameList new_name = {2, "New Name"}; size_t new_name_size = sizeof(new_name); // 获取第一条名单的存储长度 size_t first_name_length; ret = nvs_get_blob(my_handle, "first_name", NULL, &first_name_length); ESP_ERROR_CHECK(ret); // 存储新名单 ret = nvs_set_blob(my_handle, "new_name", &new_name, new_name_size); ESP_ERROR_CHECK(ret); // 更新第一条名单的存储长度 ret = nvs_commit(my_handle); ESP_ERROR_CHECK(ret); ``` 7. 读取名单: ```c NameList read_name; size_t read_name_size = sizeof(read_name); // 读取第一条名单 ret = nvs_get_blob(my_handle, "first_name", &read_name, &read_name_size); ESP_ERROR_CHECK(ret); // 读取新添加的名单 read_name_size = sizeof(read_name); ret = nvs_get_blob(my_handle, "new_name", &read_name, &read_name_size); ESP_ERROR_CHECK(ret); ``` 8. 最后,关闭NVS句柄: ```c ret = nvs_close(my_handle); ESP_ERROR_CHECK(ret); ``` 通过以上步骤,你可以实现在ESP32-C3上使用NVS API进行连续存储。注意,这里我们使用了两个不同的键("first_name"和"new_name")来存储不同的名单。你可以根据实际需求调整这些键的命名规则。 |
|
|
|
只有小组成员才能发言,加入小组>>
183个成员聚集在这个小组
加入小组456 浏览 1 评论
1500 浏览 2 评论
625浏览 6评论
519浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
500浏览 5评论
500浏览 4评论
491浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-9 04:52 , Processed in 0.787683 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191