基于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 有一定的存储空间限制,需要合理使用。

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

相关推荐
席万里4 分钟前
Go语言企业级项目使用dlv调试
服务器·开发语言·golang
jerry60921 分钟前
c++流对象
开发语言·c++·算法
fmdpenny22 分钟前
用python写一个相机选型的简易程序
开发语言·python·数码相机
海盗强1 小时前
Babel、core-js、Loader之间的关系和作用全解析
开发语言·前端·javascript
猿榜编程1 小时前
python基础-requests结合AI实现自动化数据抓取
开发语言·python·自动化
我最厉害。,。1 小时前
PHP 反序列化&原生类 TIPS&字符串逃逸&CVE 绕过漏洞&属性类型特征
android·开发语言·php
爱编程的鱼1 小时前
C# 类(Class)教程
开发语言·c#
2301_817031651 小时前
C语言-- 深入理解指针(4)
c语言·开发语言·算法
superior tigre1 小时前
C++学习:六个月从基础到就业——模板编程:模板特化
开发语言·c++·学习
yyywxk2 小时前
Matlab 报错:尝试将 SCRIPT vl_sift 作为函数执行:
开发语言·matlab