ESP-IDF NVS

这篇具有很好参考价值的文章主要介绍了ESP-IDF NVS。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ESP-IDF NVS

目录
  • ESP-IDF NVS
    • 1. 什么是NVS?
    • 2. NVS中的概念
      • 2.1. partition 分区
      • 2.2. namespace 命名空间
      • 2.3. key-value 键值对
    • 3. ESP-IDF中NVS的代码实现

1. 什么是NVS?

非易失性存储 (NVS) 库主要用于在 flash 中存储键值格式的数据。

2. NVS中的概念

ESP-IDF NVS

2.1. partition 分区

这里的Flash分区与分区表中所提到的Flash分区是相同的概念。

所以在希望调用nvs_open_from_partition()进行初始化时,需要先在分区表中设置对应名称的Flash分区。

在使用默认分区的情况下,可以直接使用nvs_open()进行初始化。

2.2. namespace 命名空间

为了减少不同组件之间键名的潜在冲突,NVS将每个键值对分配给一个命名空间。

  1. 命名空间的命名规则遵循键名的命名规则,例如,最多可占15个字符。
  2. 单个NVS分区最多只能容纳254个不同的命名空间。
  3. 不同NVS分区中具有相同名称的命名空间将被视为不同的命名空间。

2.3. key-value 键值对

  1. 支持的最大键长为15个字符。
  2. 值可以分为以下几种类型:整数型;以0结尾的字符串;可变长度的二进制数据(BLOB)。
  3. 读取值时会执行数据类型检查。如果读取操作预期的数据类型与对应键的数据类型不匹配,则返回错误。

3. ESP-IDF中NVS的代码实现

基于nvs_flash_init()nvs_open(space_name, NVS_READWRITE, &my_handle)实现的NVS文章来源地址https://www.toymoban.com/news/detail-844328.html

#include <stdio.h>
#include "esp_system.h"
#include "nvs_flash.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

void app_main(void)
{
    // 初始化NVS
    esp_err_t err = nvs_flash_init();
    if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
        ESP_ERROR_CHECK(nvs_flash_erase());
        err = nvs_flash_init();
    }
    ESP_ERROR_CHECK(err);

    nvs_handle_t my_handle;
    char* space_name = "storage";
    err = nvs_open(space_name, NVS_READWRITE, &my_handle); 
    if (err != ESP_OK) {    
        printf("打开命名空间失败,具体错误 (%s) \n", esp_err_to_name(err));
    } else {                
        printf("打开命名空间成功 \n");

        // printf("Reading restart counter from NVS ... ");
        int32_t restart_counter = 0;
        char* key_name = "restart_counter";
        err = nvs_get_i32(my_handle, key_name, &restart_counter); // 获取键值对restart_counter的值
        switch (err) {
            case ESP_OK:
                printf("键值对restart_counter的值获取成功 \n");
                printf("Restart counter的值为%ld\n", restart_counter);
                break;
            case ESP_ERR_NVS_NOT_FOUND:
                printf("键值对restart_counter的值未被设置 \n");
                break;
            default :
                printf("键值对restart_counter的值读取错误,具体错误 (%s) \n", esp_err_to_name(err));
        }

        // 更新restart_counter的值
        restart_counter++;
        err = nvs_set_i32(my_handle, key_name, restart_counter); 
        printf((err != ESP_OK) ? "设置键值对失败!\n" : "设置键值对成功\n");

        // 提交写入值
        err = nvs_commit(my_handle); 
        printf((err != ESP_OK) ? "提交写入值失败!\n" : "提交写入值成功\n");

        nvs_close(my_handle);
    }

    printf("\n");

    // 重启倒计时
    for (int i = 10; i >= 0; i--) {
        printf("%ds后重启设备...\n", i);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
    printf("现在重启!\n");
    esp_restart();
}

到了这里,关于ESP-IDF NVS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ESP-IDF + Vscode ESP32 开发环境搭建以及开发入门

    创作不易,转载请注明出处! Tips: 虽然笔者采用的是Linux开发环境,但是Windows开发环境的亦可阅读,所述内容与系统关联性不大,尤其是后文介绍的如何将自己的文件加入到工程,解决头文件找不到等问题,无论哪种系统均会存在。 Tips: 最近更新了一篇windows下搭建的,大家

    2024年02月02日
    浏览(55)
  • ESP-IDF开发框架添加自定义组件 ESP32-C3

    因为熟悉了STM32的开发方式,同时随着项目文件越来越多,可以将自己写的代码分模块添加到工程中,下面分析如何将自己写的组件添加到工程中使其能够正常编译运行。 在ESP-IDF中,构建,编译,以及下载都是通过idf.py脚本来实现的,该脚本使用 CMake,配置待构建的项目 N

    2024年02月02日
    浏览(63)
  • 【ESP32】Espressif-IDE及ESP-IDF安装

    1.打开ESP-IDF 编程指南 2.点击快速入门–安装–手动安装–Windows Installer–Windows Installer Download 3.点击下载Espressif-IDE 2.10.0 with ESP-IDF v5.0.2 1.双击安装 espressif-ide-setup-2.10.0-with-esp-idf-5.0.2.exe 2.点击“确定” 3.选择“我同意此协议(A)”,点击“下一步” 4.点击“下一步” 5.点击“

    2024年02月15日
    浏览(66)
  • vscode+esp-idf 搭建esp32开发环境,编译信息中文乱码

    1.修改波特率 2.C:UsersAdministrator.vscodeextensionsvsciot-vscode.vscode-arduino-0.6.0-win32-x64outsrccommon  打开文件 util.js 屏蔽掉这部分的代码 、  

    2024年02月10日
    浏览(52)
  • ESP32在ESP-IDF框架下使用LVGL(v8.3)

    VSCode + ESP-IDF 插件 说明: IDF版本为4.4.4 ,最新版的5.0.1弃用了些东西,而lvgl_esp32_drivers对5以上的版本未适配,所以 不建议使用5以上的版本 。 安装:安装教程,建议整体看完在进行安装,以免安装失败, 教程安装的是5.0.1,需要改为4.4.4 。 Arduino移植教程:点击此处 lvgl :g

    2023年04月16日
    浏览(70)
  • ESP32 ESP-IDF + LVGL + SquareLine Studio 设计 UI 界面

    陈拓 2022/12/10-2022/12/12 关于SquareLine Studio,乐鑫官方的ESP技术文章有介绍: 在 ESP 开发板上开发 UI 不再复杂 - 知乎 如果您尝试过在没有图形库的情况下开发 UI,那么您一定知道这有多困难。幸运的是,由乐鑫芯片驱动的屏幕,可支持用户使用多种图形库来开发 UI, LVGL 就是其

    2024年01月19日
    浏览(63)
  • ESP-IDF安装配置食用教程(以Windows系统示例)

    徐小宝:本文仅以经验指南,涉及ESP-IDF安装,编译环境配置等。 1、Git安装包,移步官网下载 2、Python安装包,移步官网下载 3、ESP-IDF文件包,移步官方Github下载或Gitee下载 4、本博文所用文件,移步附件(ESP-IDF环境安装文件,含esp-idf-v4.0.1资源包、Git-2.35.1.2-64-bit安装包、py

    2023年04月08日
    浏览(51)
  • 使用一键安装工具快速搭建 ESP-IDF 开发环境 (Windows)

    我们收到用户对 ESP-IDF SDK 软件开发环境感到搭建难、门槛高的反馈。为解决用户在此方面的问题。为此,我们推出本期教程介绍在 Windows 操作系统下使用一键安装工具快速搭建 ESP-IDF 开发环境。 您可以观看下面的教程视频,也可以阅读接下来本篇的图文教程。 【乐鑫教程】

    2024年02月09日
    浏览(82)
  • VSCode安装Esp-IDF开发环境(pip version)出错解决办法

    可以看出是 pip版本问题 ,所以只需要在安装程序使用pip命令之前,完成pip的升级即可。 好像下载4点几的版本会出现此警告,导致安装失败;而下面安装5.0.1版本的时候同样出现了此警告,但是能够安装成功。 在VSCode扩展中找到Esp-IDF插件,点击卸载按钮。 注意:此时并没有

    2024年02月08日
    浏览(69)
  • 利用群晖服务器安装乐鑫ESP-IDF编译环境

    NAS内通过套件中心下载Docker并安装ubuntu容器 打开Docker后进入注册表搜索ubuntu20.04选择第一个就可以(其余版本未进行测试) 等待安装成功后点击映像可查看 点击启动按钮后为容器命名,点击高级设置中的存储空间可在NAS本地创建一个文件夹(便于后续搭建完成后与本地交互) 点击

    2023年04月17日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包