备注

当前文档对应的版本为 ESP-IDF v5.5.0

NVS rw value 示例

[English]

示例说明

本示例展示如何在 ESP32 上初始化并配置 NVS,对单个整数值或字符串值进行读写操作,并检测操作结果是否成功。通过该示例,开发者可以学习 NVS 的初始化流程、基本读写方法及结果验证方式。

运行方法

示例完整代码见 nvs_rw_value 示例。运行前的项目构建及烧录步骤详见示例目录下的 README.md 文件。

头文件说明

本示例所使用的头文件涵盖了标准库、FreeRTOS、系统控制与日志、以及 NVS 存储等功能模块,构建了任务调度、系统运行管理、调试信息输出和非易失性数据读写的核心功能,为应用的运行与持久化存储提供完整支撑。

各头文件按功能分类如下:

  1. 标准库功能:提供基础的输入输出功能和整数类型支持,用于打印调试信息以及跨平台保证整数精度。

#include <stdio.h>
#include <inttypes.h>
  1. 系统与日志:提供系统级 API 与日志输出功能,用于芯片信息获取、系统控制以及运行时调试。

#include "esp_system.h"
#include "esp_log.h"
  1. FreeRTOS:提供实时操作系统的核心定义和任务管理接口,用于多任务创建、调度与控制。

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
  1. 非易失性存储:提供非易失性存储的初始化与访问接口,用于存储和读取持久化数据。

#include "nvs_flash.h"
#include "nvs.h"

结构体/全局常量说明

结构体类型定义:定义了一个结构体 type_str_pair_t,用于建立 NVS 数据类型与字符串表示之间的映射关系,包含两个成员:

  • type 用于存放 NVS 数据类型枚举值。

  • str 用于存放对应类型的字符串描述。

全局常量:用于简化类型与字符串转换的处理逻辑,并且保证遍历时的安全性与可读性。

  • 定义一个只读的静态数组 type_str_pair[],内容是各个 NVS 数据类型及其对应字符串。常用于打印、调试或根据类型选择不同的处理逻辑。

  • 定义 TYPE_STR_PAIR_SIZE ,用于存放 type_str_pair[] 数组的元素个数,避免手动计算长度,常用于遍历数组。

任务函数说明

该示例定义了一个工具函数 type_to_str(),用于将 NVS 数据类型枚举值 (nvs_type_t) 转换为对应的字符串表示,以便在打印日志或调试时,更直观地显示数据类型。

调用该函数时需传入待转换的枚举值,其执行逻辑为:

  1. 遍历全局常量数组 type_str_pair[]

  2. 将当前元素的 type 与传入参数进行比较。

  3. 如果匹配成功,则返回该元素对应的字符串 str

  4. 如果遍历结束仍未找到匹配项,则返回 "Unknown",表示该类型未定义或不在映射表中。

主函数说明

该函数作为程序入口,演示了在 ESP32 上使用 NVS(非易失性存储)进行初始化、读写、查询和删除操作的完整流程。通过此示例,开发者可以学习 NVS 的初始化、数据操作以及错误处理方法。

以下为函数的主要实现步骤,鉴于大部分流程已在 通用步骤 中详细介绍,可查看文档中 NVS 通用步骤 小节的对应标题。对于重复内容此处不再赘述,仅重点说明本示例中的关键实现与差异部分。

  1. NVS 初始化

  2. 打开 NVS 句柄

  • 命名空间为 "storage"

  1. 整数值读写

  • 读取整数值后通过返回值判断读取状态,并打印相应日志。

  1. 字符串读写

  • 读取字符串值后通过返回值判断读取状态,并打印相应日志。

  1. 查询 NVS 键值

  • 获取键值对信息后,调用工具函数 type_to_str() 将存储项的类型转换为可读字符串,并结合键名一起打印日志,方便调试和查看 NVS 中的键值信息。

  1. 删除 NVS 键值

  2. 提交更改