NVS Blob块存储

1. 演示app_main任务栈溢出

2. 设置app_main任务栈大小

打开menuconfig,输入main,如下图所示

默认栈大小为3584字节,这里改为35840字节,重新编译

3. Blob存储结果

#include <stdio.h>
#include <string.h>
#include "esp_log.h"
#include "nvs.h"
#include "nvs_flash.h"#define AP_MAX  40
#define TAG     "NVS"typedef struct {char ssid[33];char passwd[34];
} ap_t;void app_main(void)
{size_t length;nvs_handle_t handle;ap_t ap_write[AP_MAX] = {0};ap_t ap_read [AP_MAX] = {0};for (int i = 0; i < AP_MAX; i++) {strcpy(ap_write[i].ssid, "TPLINKHOST");strcpy(ap_write[i].passwd, "4018el9U");}nvs_flash_init();nvs_open("storage", NVS_READWRITE, &handle);nvs_set_blob(handle, "ap_info", ap_write, sizeof(ap_write));length = sizeof(ap_read);nvs_get_blob(handle, "ap_info", ap_read, &length);ESP_LOGI(TAG, "AP information list:");for (int i = 0; i < AP_MAX; i++) {ESP_LOGI(TAG, "AP(%d): ssid:%s passwd:%s", i, ap_read[i].ssid, ap_read[i].passwd);}nvs_commit(handle);nvs_close(handle);
}

4. 启动流程

启动流程:

  1. 概述
  2. bootloader启动
  3. APP启动

4. PartitionTable分区表

默认的PartitionTable分区表 (注意!!!ESP32和ESP32S3的Flash布局不同)

分区表描述

如何自定义分区表?

  1. 复制原始分区表到工程路径下
  2. 默认分区表内容
  3. 新增一个NVS分区
  4. 重命名分区表文件
  5. menuconfig中输入partition,配置分区表
  6. 编译工程,可以看到编译报错,原因是Flash不够
  7. 打开menuconfig,输入flash,设置flash大小为8M

5. 使用自定义的分区表

#include <stdio.h>
#include <string.h>
#include "esp_log.h"
#include "nvs.h"
#include "nvs_flash.h"#define AP_MAX  2
#define TAG     "NVS"typedef struct {char ssid[33];char passwd[64];
} ap_t;void app_main(void)
{size_t length;nvs_handle_t handle;ap_t ap_write[AP_MAX] = {0};ap_t ap_read [AP_MAX] = {0};for (int i = 0; i < AP_MAX; i++) {strcpy(ap_write[i].ssid, "TPLINKHOST");strcpy(ap_write[i].passwd, "123456789");}nvs_flash_init_partition("mynvs");nvs_open_from_partition("mynvs", "storage", NVS_READWRITE, &handle);nvs_set_blob(handle, "ap_info", ap_write, sizeof(ap_write));length = sizeof(ap_read);nvs_get_blob(handle, "ap_info", ap_read, &length);ESP_LOGI(TAG, "AP information list:");for (int i = 0; i < AP_MAX; i++) {ESP_LOGI(TAG, "AP(%d): ssid:%s passwd:%s", i, ap_read[i].ssid, ap_read[i].passwd);}nvs_commit(handle);nvs_close(handle);
}

原来nvs_flash_init改为nvs_flash_init_partition, nvs_open改为nvs_open_from_partition, 这样就从默认的NVS分区,切换到我们自定义的mynvs分区。
执行结果
_init改为nvs_flash_init_partition, nvs_open改为nvs_open_from_partition`, 这样就从默认的NVS分区,切换到我们自定义的mynvs分区。
执行结果

ESP32专栏八 NVS存储相关推荐

  1. ESP32开发--使用NVS存储数据

    ESP32基础系列 ESP32初体验之环境搭建 ESP32外设学习之GPIO ESP32外设学习之UART ESP32开发之给模块连上网络 ESP32的一键配网与Airkiss配网 ESP32使用NV ...

  2. SimpleFOC之ESP32(八)—— ABZ编码器电机

    目录 一.增量式编码器介绍 二.ESP32drive控制霍尔电机 2.1.原理图 2.2.读编码器获取角度 2.2.1.硬件准备 2.2.2.硬件连接 2.2.3.代码演示 2.2.4.观察角度输出 ...

  3. ESP32 通过NVS存储WiFi账号和密码至Flash

    前言 项目需求:在ESP32板子重启之后,自动从Flash中寻找已经存储好的WiFi账号和秘密,连接到网络. 要想能够很好的理解如何将WiFi的账号和密码如何写入到Flash的什么地方,首先需要了解下 ...

  4. ESP32用NVS存储wifi信息

    通俗来说,NVS 就是在 flash 上分配的一块内存空间 ,提供给用户保存掉电不丢失的数据. 非易失性存储 (NVS) 库主要用于在 flash 中存储键值格式的数据. NVS适合存储一些小数据,如 ...

  5. openCV专栏(八):图像轮廓:绘制轮廓

    OPENCV基础操作 提示:本专栏所用版本仅供参考,其他版本也可 库 版本 python Python 3.9.3 opencv 4.5.5 matplotlib 3.4.3 numpy 1.19.5 ...

  6. 使用Arduino开发ESP32(八):ESP32的EPROM的写入读取

    写入EPROM /* 该代码向EEPROM写入4096字节数据 */ #include <EEPROM.h>void setup() {Serial.begin(115200);Seria ...

  7. spark 源码分析之十八 -- Spark存储体系剖析

    本篇文章主要剖析BlockManager相关的类以及总结Spark底层存储体系. 总述 先看 BlockManager相关类之间的关系如下: 我们从NettyRpcEnv 开始,做一下简单说明. Ne ...

  8. 关于大型网站技术演进的思考(八)--存储的瓶颈终篇(8)

    在开始本篇主要内容前,我们一起看看下面的几张截图,首先是第一张图,如下图所示: 这是一家电商网站的首页,当我们第一次打开这个首页,网站会弹出一个强制性的对话框,让用户选择货物配送的地址,如果是淘宝和京 ...

  9. MYSQL数据库的基本操作八(存储函数)

    一,存储函数的创建,调用,查看,修改,删除 1,创建存储函数drop function if exists func_name; #如果存储函数存在,删除存储函数delimiter // #声明存储函 ...

最新文章

  1. linux下时间问题---date
  2. 自动化运维工具Ansible详细部署
  3. [计算机网络] C++模拟telnet登陆SMTP服务发送邮件过程
  4. 一文理解微服务架构下的系统可用性如何保证?
  5. python源码精要(3)-C代码规范
  6. 征稿 | ​2020年全国知识图谱与语义计算大会
  7. nagios常见问题
  8. mysql删除用户密码_MySQL 创建用户、授权用户、撤销用户权限、更改用户密码、删除用户(实用技巧)...
  9. 从 VI 编辑器谈操作系统起源及编辑器本质
  10. 大一计算机引论知识点,计算机引论知识点2015.doc
  11. 计算机基础考试函数公式,计算机基础-excel公式考和函数.ppt
  12. FileZilla客户端远程连接FTP中文出现乱码
  13. 基于神经网络的房价预测,房价预测 神经网络
  14. CY5-N-羟基琥珀酰亚胺|cas146368-14-1|荧光量子产率
  15. 如何u盘装系统win10 64位?
  16. Android 相机教程,安卓应用开发调用系统相机教程
  17. iOS 打开天猫/淘宝/京东客户端并且进入商品详情页/店铺主页的方法
  18. Win10 yolov5 6.0版本使用tensorrtx部署tensorRT
  19. leetcode-腾讯精选50题-02
  20. [2022]李宏毅深度学习与机器学习课程内容总结

热门文章

  1. Linux查看文件字节数、行数、大小【shell获取文件行数、字节数】
  2. pentile 子像素_三星和索尼OLED子像素排列方式对比 有哪些差异?
  3. python怎么在画布上写字_python ImageDraw 添加文字
  4. Excel制作万年历
  5. oracle日记账导出,OracleEBSR12GL日记账业务操作01:日记账批录入
  6. flag in flag.php,hgame2019解题记录
  7. 二级题库(C语言)------ 第三套题
  8. 98 服务器系统,Windows 98
  9. SimpleITK使用——4. 奇怪的问题
  10. Nginx中last和break redirect和permanent区别和联系