在 ESP32 中,nvs_api.cpp
(通常 nvs
指非易失性存储,Non - Volatile Storage)主要实现了与非易失性存储相关的功能。ESP32 的 NVS 是一个轻量级的键值对存储系统,它允许开发者将少量的数据持久化存储在闪存中,即使设备断电或重启,数据也不会丢失。以下详细介绍 nvs_api.cpp
可能实现的主要功能:
1. 初始化和打开 NVS 句柄
- 功能描述:在使用 NVS 之前,需要对其进行初始化,并打开一个命名空间的句柄。命名空间用于将不同类型的数据进行分组,方便管理。
- 代码示例(伪代码):
nvs_handle_t handle;
esp_err_t err = nvs_open("my_namespace", NVS_READWRITE, &handle);
if (err != ESP_OK) {// 处理打开失败的情况
}
2. 数据写入操作
- 功能描述:允许将不同类型的数据(如整数、字符串、二进制数据等)写入到 NVS 中。
- 代码示例(伪代码):
// 写入整数
int my_int = 42;
err = nvs_set_i32(handle, "my_key", my_int);
if (err != ESP_OK) {// 处理写入失败的情况
}// 写入字符串
const char* my_string = "Hello, NVS!";
err = nvs_set_str(handle, "my_string_key", my_string);
if (err != ESP_OK) {// 处理写入失败的情况
}
3. 数据读取操作
- 功能描述:从 NVS 中读取之前存储的数据。读取时需要指定键名和存储数据的类型。
- 代码示例(伪代码):
// 读取整数
int read_int;
err = nvs_get_i32(handle, "my_key", &read_int);
if (err != ESP_OK) {if (err == ESP_ERR_NVS_NOT_FOUND) {// 处理键未找到的情况} else {// 处理其他读取错误}
}// 读取字符串
char read_string[20];
size_t required_size;
err = nvs_get_str(handle, "my_string_key", NULL, &required_size);
if (err == ESP_OK) {err = nvs_get_str(handle, "my_string_key", read_string, &required_size);if (err != ESP_OK) {// 处理读取错误}
}
4. 数据提交和关闭句柄
- 功能描述:在完成数据写入操作后,需要调用提交函数将数据真正写入到闪存中。最后,关闭 NVS 句柄以释放资源。
- 代码示例(伪代码):
// 提交写入的数据
err = nvs_commit(handle);
if (err != ESP_OK) {// 处理提交失败的情况
}// 关闭句柄
nvs_close(handle);
5. 错误处理和状态检查
- 功能描述:在每个 NVS 操作中,都会返回一个
esp_err_t
类型的错误码,用于指示操作是否成功。nvs_api.cpp
会处理这些错误码,并可能提供相应的错误信息,方便开发者调试。 - 代码示例(伪代码):
esp_err_t err = nvs_open("my_namespace", NVS_READWRITE, &handle);
if (err == ESP_ERR_NVS_NOT_INITIALIZED) {// 处理 NVS 未初始化的情况
} else if (err == ESP_ERR_NVS_NOT_FOUND) {// 处理命名空间未找到的情况
} else if (err != ESP_OK) {// 处理其他错误
}
6. 命名空间和键的管理
- 功能描述:可能提供一些函数来管理命名空间和键,例如删除命名空间、删除键等操作。
- 代码示例(伪代码):
// 删除键
err = nvs_erase_key(handle, "my_key");
if (err != ESP_OK) {// 处理删除失败的情况
}// 删除整个命名空间
err = nvs_erase_all(handle);
if (err != ESP_OK) {// 处理删除失败的情况
}
通过这些功能,nvs_api.cpp
为开发者提供了一个方便、可靠的接口,用于在 ESP32 上进行非易失性数据的存储和管理。