ESP32-S3 NVS迭代器
什么是NVS迭代器?🤔
ESP32-S3的NVS库提供了迭代器,允许你根据指定的分区名称、命名空间和数据类型轮询NVS中存储的键值对。使用方法类似于c++里的迭代器(iterator)用于遍历容器,而NVS的迭代器同样用来遍历nvs。
如何使用NVS迭代器?
你可以使用以下函数执行相关操作:
nvs_entry_find
:返回一个不透明句柄,用于后续调用nvs_entry_next
和nvs_entry_info
函数;nvs_entry_next
:返回指向下一个键值对的迭代器;nvs_entry_info
:返回每个键值对的信息。
如果未找到符合标准的键值对,nvs_entry_find
和nvs_entry_next
将返回NULL,此时不必释放迭代器。若不再需要迭代器,可使用nvs_release_iterator
释放迭代器。
✨对于nvs_entry_find()
函数它的参数如下:
-
NVS_DEFAULT_PART_NAME:这是一个字符串,表示要搜索的NVS分区的名称。在大多数情况下,我们使用默认的NVS分区,其名称为"NVS_DEFAULT_PART_NAME"。
-
“namespace”:要搜索的命名空间的名称。在NVS中,键值对被组织在命名空间中。这个参数可以是任何你在NVS中定义的命名空间的名称。
-
NVS_TYPE_ANY:这是一个枚举值,表示要搜索的键值对的数据类型。
使用方法如下
nvs_iterator_t it = nvs_entry_find(NVS_DEFAULT_PART_NAME, "namespace", NVS_TYPE_ANY);
while (it != NULL) {
char key[NVS_KEY_MAX_SIZE], value[64];
nvs_entry_info_t info;
nvs_entry_info(it, &info);
it = nvs_entry_next(it);
strncpy(key, info.key, NVS_KEY_MAX_SIZE);
size_t length = sizeof(value);
nvs_get_str(my_handle, key, value, &length);
printf("Key = %s, Value = %s\n", key, value);
}
nvs_release_iterator(it);
首先使用nvs_entry_find
函数找到第一个键值对。然后,我们使用nvs_entry_next
函数在同一命名空间中查找下一个键值对,直到没有更多的键值对为止。对于每个找到的键值对,我们使用nvs_entry_info
函数获取其信息,然后打印出键和值。最后,我们使用nvs_release_iterator
函数释放迭代器。
结论
官方手册:👇
NVS迭代器