基于esp32实现键值对存储读写c程序例程

在基于 ESP32 的系统中,我们可以使用 NVS(Non-Volatile Storage,非易失性存储)来实现系统配置参数的掉电存储和读写。NVS 是 ESP32 提供的一种存储机制,允许我们将键值对数据存储在闪存中,即使设备掉电,数据也不会丢失。

以下是一个简单的 C 程序例程,展示了如何使用 NVS 进行系统配置参数的读写:

c

#include <stdio.h>

#include "nvs_flash.h"

#include "nvs.h"

// 定义一个函数用于写入配置参数

esp_err_t write_config_parameter(const char* key, int value) {

// 打开 NVS 命名空间

nvs_handle_t my_handle;

esp_err_t err = nvs_open("storage", NVS_READWRITE, &my_handle);

if (err != ESP_OK) {

printf("Error (%s) opening NVS handle!\n", esp_err_to_name(err));

return err;

}

// 写入参数

err

= nvs_set_i32(my_handle, key, value);

if (err != ESP_OK) {

printf("Error (%s) writing to NVS!\n", esp_err_to_name(err));

} else {

// 提交更改

err

= nvs_commit(my_handle);

if (err != ESP_OK) {

printf("Error (%s) committing to NVS!\n", esp_err_to_name(err));

}

}

// 关闭 NVS 句柄

nvs_close(my_handle);

return err;

}

// 定义一个函数用于读取配置参数

esp_err_t read_config_parameter(const char* key, int* value) {

// 打开 NVS 命名空间

nvs_handle_t my_handle;

esp_err_t err = nvs_open("storage", NVS_READONLY, &my_handle);

if (err != ESP_OK) {

printf("Error (%s) opening NVS handle!\n", esp_err_to_name(err));

return err;

}

// 读取参数

err

= nvs_get_i32(my_handle, key, value);

switch (err) {

case ESP_OK:

printf("Read parameter %s: %d\n", key, *value);

break;

case ESP_ERR_NVS_NOT_FOUND:

printf("Parameter %s not found!\n", key);

break;

default :

printf("Error (%s) reading from NVS!\n", esp_err_to_name(err));

}

// 关闭 NVS 句柄

nvs_close(my_handle);

return err;

}

void app_main() {

// 初始化 NVS

esp_err_t err = nvs_flash_init();

if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {

// NVS 分区被截断,需要擦除并重试

ESP_ERROR_CHECK(nvs_flash_erase());

err

= nvs_flash_init();

}

ESP_ERROR_CHECK(err);

// 定义要读写的键和值

const char* key = "config_param";

int write_value = 123;

// 写入配置参数

err

= write_config_parameter(key, write_value);

if (err == ESP_OK) {

printf("Parameter %s written successfully!\n", key);

}

// 读取配置参数

int read_value;

err

= read_config_parameter(key, &read_value);

if (err == ESP_OK) {

printf("Parameter %s read successfully: %d\n", key, read_value);

}

}

代码说明:

  1. 初始化 NVS:在 app_main 函数中,我们首先调用 nvs_flash_init() 来初始化 NVS。如果 NVS 分区被截断或有新版本,我们需要擦除并重试。

  2. 写入配置参数:write_config_parameter 函数用于将一个整数参数写入 NVS。我们首先打开 NVS 命名空间,然后使用 nvs_set_i32 写入参数,最后调用 nvs_commit 提交更改。

  3. 读取配置参数:read_config_parameter 函数用于从 NVS 中读取一个整数参数。我们打开 NVS 命名空间,使用 nvs_get_i32 读取参数,并根据返回值进行相应的处理。

  4. 主函数:在 app_main 函数中,我们调用 write_config_parameter 写入一个参数,然后调用 read_config_parameter 读取该参数,并打印结果。

注意事项:

• 这个例程只是一个简单的示例,实际应用中可能需要处理更多的数据类型和错误情况。

• NVS 有一定的存储空间限制,需要合理使用。

• 在写入和读取参数时,要确保键的唯一性。

相关推荐
呆呆的小草1 小时前
Cesium距离测量、角度测量、面积测量
开发语言·前端·javascript
uyeonashi1 小时前
【QT系统相关】QT文件
开发语言·c++·qt·学习
冬天vs不冷2 小时前
Java分层开发必知:PO、BO、DTO、VO、POJO概念详解
java·开发语言
sunny-ll2 小时前
【C++】详解vector二维数组的全部操作(超细图例解析!!!)
c语言·开发语言·c++·算法·面试
猎人everest3 小时前
Django的HelloWorld程序
开发语言·python·django
西装没钱买3 小时前
C语言多进程TCP服务器与客户端
服务器·c语言·tcp/ip·进程
嵌入式@秋刀鱼3 小时前
《第四章-筋骨淬炼》 C++修炼生涯笔记(基础篇)数组与函数
开发语言·数据结构·c++·笔记·算法·链表·visual studio code
嵌入式@秋刀鱼3 小时前
《第五章-心法进阶》 C++修炼生涯笔记(基础篇)指针与结构体⭐⭐⭐⭐⭐
c语言·开发语言·数据结构·c++·笔记·算法·visual studio code
别勉.4 小时前
Python Day50
开发语言·python
whoarethenext4 小时前
使用 C/C++的OpenCV 裁剪 MP4 视频
c语言·c++·opencv