本文主要是介绍ESP32-C3模组上跑通NVS(5),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
接前一篇文章:ESP32-C3模组上跑通NVS(4)
本文内容参考:
非易失性存储库 - ESP32 - — ESP-IDF 编程指南 latest 文档
ESP32-C3入门教程 基础篇(八、NVS — 非易失性存储库的使用)_esp入门教学-CSDN博客
【ESP-IDF】介绍NVS_esp-idf是什么-CSDN博客
《ESP-IDF入门指南》----->nvs_flash(非易失性存储库)_esp nvs flash-CSDN博客
12-ESP32-S3 的 NVS(Non-Volatile Storage)_esp32-s3 nvs-CSDN博客
特此致谢!
二、NVS常用函数
14. nvs_set_i8函数
- 函数原型
components\components\nvs_flash\include\nvs.h中:
esp_err_t nvs_set_i8 (nvs_handle_t handle, const char* key, int8_t value);
- 函数功能
为给定键设置int8_t值。
根据键的名称设置键的值。注意,在调用nvs_commit之前,不会更新实际存储。不管键值对是被创建还是被更新。函数总是需要至少一个nvs可用条目。参见nvs_get_stats。
创建操作类型后,可用条目的数量将减少一个;更新操作类型后,可用条目的数量保持不变。
- 函数参数
handle:从nvs_open函数获得的句柄。无法使用以只读方式打开的句柄。
key:键名。最大长度为(NVS_KEY_NAME_MAX_SIZE-1)(15)个字符。不应该是空的。
value:要设置的值。
- 函数返回值
ESP_OK —— 值设置成功。
ESP_FAIL —— 存在内部错误;很可能是由于NVS分区损坏(仅当NVS断言检查被禁用时)。
ESP_ERR_NVS_INVALID_HANDLE —— 句柄已关闭或为NULL。
ESP_ERR_NVS_READ_ONLY —— 存储句柄以只读方式打开。
ESP_ERR_NVS_INVALID_NAME —— 键名称不满足约束。
ESP_ERR_NVS_NOT_ENOUGH_SPACE —— 底层存储中没有足够的空间来保存值。
ESP_ERR_NVS_REMOVE_FAILED —— 值未更新,因为闪存写入操作失败。然而,该值已写入,并且更新将在重新初始化nvs后完成,前提是闪存操作不会再次失败。
15. nvs_set_u8 函数
- 函数原型
components\components\nvs_flash\include\nvs.h中:
esp_err_t nvs_set_u8 (nvs_handle_t handle, const char* key, uint8_t value);
- 函数功能
为给定的键设置uint8_t值。
除了数据类型之外,此函数与nvs_set_i8相同。
16. nvs_set_i16函数
- 函数原型
components\components\nvs_flash\include\nvs.h中:
esp_err_t nvs_set_i16 (nvs_handle_t handle, const char* key, int16_t value);
- 函数功能
为给定的键设置int16_t值。
除了数据类型之外,此函数与nvs_set_i8相同。
17. nvs_set_u16函数
- 函数原型
components\components\nvs_flash\include\nvs.h中:
esp_err_t nvs_set_u16 (nvs_handle_t handle, const char* key, uint16_t value);
- 函数功能
为给定的键设置uint16_t值。
除了数据类型之外,此函数与nvs_set_i8相同。
18. nvs_set_i32函数
- 函数原型
components\components\nvs_flash\include\nvs.h中:
esp_err_t nvs_set_i32 (nvs_handle_t handle, const char* key, int32_t value);
- 函数功能
为给定的键设置int32_t值。
除了数据类型之外,此函数与nvs_set_i8相同。
19. nvs_set_u32函数
- 函数原型
components\components\nvs_flash\include\nvs.h中:
esp_err_t nvs_set_u32 (nvs_handle_t handle, const char* key, uint32_t value);
- 函数功能
为给定的键设置uint32_t值。
除了数据类型之外,此函数与nvs_set_i8相同。
20. nvs_set_i64函数
- 函数原型
components\components\nvs_flash\include\nvs.h中:
esp_err_t nvs_set_i64 (nvs_handle_t handle, const char* key, int64_t value);
- 函数功能
为给定的键设置int64_t值。
除了数据类型之外,此函数与nvs_set_i8相同。
21. nvs_set_u64函数
- 函数原型
components\components\nvs_flash\include\nvs.h中:
esp_err_t nvs_set_u64 (nvs_handle_t handle, const char* key, uint64_t value);
- 函数功能
为给定的键设置uint64_t值。
除了数据类型之外,此函数与nvs_set_i8相同。
22. nvs_set_str函数
- 函数原型
components\components\nvs_flash\include\nvs.h中:
esp_err_t nvs_set_str (nvs_handle_t handle, const char* key, const char* value);
- 函数功能
为给定键设置字符串。
设置键的字符串值。函数需要整个空间,以便新数据可以作为同一nvs页面中的连续条目使用。操作消耗1个开销条目,并且每32个新字符串(包括要设置的零字符)消耗1个条目。
在对现有键进行值更新的情况下,由以前的值和开销条目占用的条目将返回到可用条目的池中。
注意:
1)长字符串值的存储可能会由于nvs页面的碎片而失败,即使nvs_get_stats返回的available_entries表明有足够的总体可用空间。
2)在调用nvs_commit之前,不会更新基础存储。
- 函数参数
handle:从nvs_open函数获得的句柄。无法使用以只读方式打开的句柄。
key:键名。最大长度为(NVS_KEY_NAME_MAX_SIZE-1)(15)个字符。不应该是空的。
value:要设置的值。对于字符串,如果有一个完整的页面可供写入,则最大长度(包括空字符)为4000字节。然而,如果自由空间是碎片化的,此最大长度会减少。
- 函数返回值
ESP_OK —— 值设置成功。
ESP_FAIL —— 存在内部错误;很可能是由于NVS分区损坏(仅当NVS断言检查被禁用时)。
ESP_ERR_NVS_INVALID_HANDLE —— 句柄已关闭或为NULL。
ESP_ERR_NVS_READ_ONLY —— 存储句柄以只读方式打开。
ESP_ERR_NVS_INVALID_NAME —— 键名称不满足约束。
ESP_ERR_NVS_NOT_ENOUGH_SPACE —— 底层存储中没有足够的空间来保存值。
ESP_ERR_NVS_REMOVE_FAILED —— 值未更新,因为闪存写入操作失败。然而,该值已写入,并且更新将在重新初始化nvs后完成,前提是闪存操作不会再次失败。
ESP_ERR_NVS_VALUE_TOO_LONG —— 字符串值太长。
23. nvs_set_blob函数
- 函数原型
components\components\nvs_flash\include\nvs.h中:
esp_err_t nvs_set_blob(nvs_handle_t handle, const char* key, const void* value, size_t length);
- 函数功能
为给定键设置可变长度二进制值。
设置键的可变长度二进制值。函数使用2个开销和1个条目,每个条目来自可用条目池中的32字节新数据。参见nvs_get_stats。
在现存密钥的值更新的情况下,现有值和2个开销项所占用的空间将返回到可用项的池中。
注意:在调用nvs_commit之前,不会更新基础存储。
- 函数参数
handle:从nvs_open函数获得的句柄。无法使用以只读方式打开的句柄。
key:键名。最大长度为(NVS_KEY_NAME_MAX_SIZE-1)(15)个字符。不应该是空的。
value:要设置的值。
length:要设置的二进制值的长度,以字节为单位;最大长度为508000字节或(分区大小的97.6%-4000)字节,以较低者为准。
- 函数返回值
ESP_OK —— 值设置成功。
ESP_FAIL —— 存在内部错误;很可能是由于NVS分区损坏(仅当NVS断言检查被禁用时)。
ESP_ERR_NVS_INVALID_HANDLE —— 句柄已关闭或为NULL。
ESP_ERR_NVS_READ_ONLY —— 存储句柄以只读方式打开。
ESP_ERR_NVS_INVALID_NAME —— 键名称不满足约束。
ESP_ERR_NVS_NOT_ENOUGH_SPACE —— 底层存储中没有足够的空间来保存值。
ESP_ERR_NVS_REMOVE_FAILED —— 值未更新,因为闪存写入操作失败。然而,该值已写入,并且更新将在重新初始化nvs后完成,前提是闪存操作不会再次失败。
ESP_ERR_NVS_VALUE_TOO_LONG —— 值太长。
本文中的各函数对应于前文(ESP32-C3模组上跑通NVS(1)-CSDN博客)提到的如下内容:
更多函数介绍请看下回。
这篇关于ESP32-C3模组上跑通NVS(5)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!