第8章 NVS

news2025/1/7 22:08:09

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启动
    bootloader启动
  3. APP启动
    APPA应用程序启动

4. PartitionTable分区表

默认的PartitionTable分区表 (注意!!!ESP32和ESP32S3的Flash布局不同)
默认的Flash分区表
分区表描述
分区表
如何自定义分区表?

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用nginx搭建HTTP FLV流媒体服务器

使用nginx搭建HTTP FLV流媒体服务器 文章目录使用nginx搭建HTTP FLV流媒体服务器1 HTTP FLV简介2 HTTP FLV流媒体服务搭建3 结果验证1 HTTP FLV简介 前文已经介绍了RTSP、RTMP、HLS的流媒体协议&#xff0c;还有一种比较常见的流媒体协议HTTP FLV&#xff0c;其兼具RTMP的实时…

Kettle源码启动运行

Kettle源码运行环境如下&#xff1a; windows10 Kettle 9.3.0.2 Java JDK 11 IntelliJ IDEA 2021.2.2 (Community Edition) Maven 3.8.1&#xff08;版本不需要太高 &#xff09; 导入kettle到IDEA 可通过kettle的GIthub地址获取 kettle的克隆连接&#xff0c;或直接下载ZIP压…

python2和python3环境安装

一、背景 ​ 众所周知&#xff0c;python当前有两大主流版本&#xff0c;分别是Python2和Python3系列&#xff0c;其中Python3因为对Python2做了较大的优化&#xff0c;使得Python3不会向下兼容&#xff0c;但是工作和学习中&#xff0c;有很多项目需要Python2的环境&#xff…

SAP 物料账未分摊差异分析

今天在开发处理未分摊差异程序的时候&#xff0c;偶然在网络上看到一篇这样的文章&#xff0c;挺有意思的&#xff0c;特意转载过来&#xff0c;方便大伙学习之用&#xff0c;若有异议&#xff0c;立即撤回。 利用CKMLCP运行完物料分类账之后&#xff0c;差异科目余额通常为0&…

Golang网络聊天室案例

1.聊天室设计分析 一. 概览 实现 个网络聊天室&#xff08;群&#xff09; 功能分析&#xff1a; 上线下线聊天&#xff0c;其他人&#xff0c;自己都可以看到聊天消息查询当前聊天室用户名字 who可以修改自己名字 rename | Duke超时踢出 技术点分析&#xff1a; 1 . sock …

Notion 汉化Macwindows客户端

1、注册/登录账号&#xff1a; https://www.notion.so/zh-cn 2、下载桌面应用&#xff1a; https://www.notion.so/desktop 3、下载汉化js插件 地址&#xff1a;https://github.com/Reamd7/notion-zh_CN 点击最后一次更新的标签&#xff0c;下载【 notion-zh_CN.js 】文件 …

[激光原理与应用-64]:激光器-器件 - 光电二极管

第1章 概述光电二极管&#xff08;Photo-Diode&#xff09;和普通二极管一样&#xff0c;也是由一个PN结组成的半导体器件&#xff0c;也具有单方向导电特性。但在电路中它不是作整流元件&#xff0c;而是把光信号转换成电信号的光电传感器件。普通二极管在反向电压作用时处于截…

如何在Windows上同时搭建多个版本的golang环境——g

假如说我们不同的项目使用的go版本是不一样的&#xff0c;当我们想切换时&#xff0c;不懂的人可能就直接卸载掉现有的go环境去安装新的go环境了&#xff0c;这种方法可行但是有点呆&#xff0c;今天推荐一个好用的go版本管理工具——g,不是寄了的寄&#xff0c;就是英文字母g。…

jQuery(一):选择器、样式操作、动画效果

jQuery选择器样式操作jQuery 动画效果选择器 1.基础选择器 语法格式&#xff1a; $(“选择器”) // 里面选择器直接写 CSS 选择器即可&#xff0c;但是要加引号 常见选择器类型 例如&#xff1a; 2.样式设置 语法格式&#xff1a; $(‘div’).css(‘属性’, ‘值’) 例如&…

PHP 百度知识图谱数据处理与接入SDK

前言最近的项目在做百度知识图谱相关的&#xff0c;需要实现内容将本地数据处理->数据格式转化->数据接入图谱平台。因为百度提供的sdk为Python的sdk&#xff0c;所以我需要将Python程序转换成PHP格式。图谱生产流程介绍1.知识定义建立相应的scheme&#xff0c;确定类目以…

探究SQL SERVER 更改跟踪

介绍SQL SERVER 在2008 以上的版本提供两个用于数据库中跟踪数据更改的功能&#xff1a;变更数据捕获&#xff08;CDC &#xff09;与更改跟踪&#xff08;CT &#xff09;。这两个功能使应用程序能够确定对数据库中的用户表所做的 DML 更改&#xff08;插入、更新和删除操作 &…

Python基础(二十五):异常处理基础知识

文章目录 异常处理基础知识 一、了解异常 二、异常的写法 1、语法

HNUCM蓝桥杯Python组寒假第二次练习

文章目录1316: 选房子2158: 倍数问题2196: X星游戏1034: 近似回文词1749: 最少硬币2079: X星大学2086: 奖牌榜总结&#xff1a;1316: 选房子 1316: 选房子 [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 128 MB 题目描述 栋栋和李剑已经大四了&#xff0c;想要出去找…

UDS诊断系列介绍13-31服务

本文框架1. 系列介绍1.1 31服务概述2. 31服务请求与应答2.1 31服务请求2.2 31服务正响应2.3 31服务否定响应3. Autosar系列文章快速链接1. 系列介绍 UDS&#xff08;Unified Diagnostic Services&#xff09;协议&#xff0c;即统一的诊断服务&#xff0c;是面向整车所有ECU的…

”凌寒独自开“绽放不一样的自己

目录 1&#xff1a;介绍 2&#xff1a;细节介绍 ​编辑 3&#xff1a;范例演示 4&#xff1a;平台助力 5&#xff1a;冲冲冲 1&#xff1a;介绍 每一个程序员都有一个产品的梦想&#xff0c;在独自开&#xff0c;每一位开发者为自己写代码。 毕竟谁又想错过每一个展示自…

CSDN网站勋章获取介绍

持之以恒&#xff1a;已下线&#xff0c;目前无法获取 签到勋章&#xff1a;签到新秀、签到达人、签到王者都已下线&#xff0c;目前无法获取 分享勋章&#xff1a;分享学徒、分享小兵、分享达人、分享精英、分享宗师、分享王者、至尊王者都已下线&#xff0c;目前无法获取 …

Git Extensions的安装与使用

一&#xff0c;介绍&#xff1a; Git Extensions是一个工具包&#xff0c;旨在使Windows下的Git更直观。 功能 Git的Windows资源管理器集成 功能丰富的Git用户界面 32位和64位支持 二&#xff0c;安装 csdn下载地址 GitExtensionhttps://download.csdn.net/download/weixin…

前端面试当中 js原型及原型链常考知识点

一、构造函数 讲原型则离不开构造函数&#xff0c;让我们先来认识下构造函数。 1.1 构造函数分为 实例成员 和 静态成员 让我们先来看看他们分别是什么样子的。 实例成员&#xff1a; 实例成员就是在构造函数内部&#xff0c;通过this添加的成员。实例成员只能通过实例化的…

【MyBatis】第三篇:传递参数

前面聊了一些配置文件的标签意义&#xff0c;在实例演示的时候&#xff0c;发现用的sql都是定死的&#xff0c;也就是无法传递参数&#xff0c;这个不符合开发的环境的&#xff0c;毕竟程序是需要交互的&#xff0c;自然也会有参数传递&#xff0c;下面依次进行演示。 在映射文…

一个注解(优雅)搞定SpringBoot项目中的身份证号、手机号等敏感数据脱敏

&#x1f4de; 文章简介&#xff1a;一个注解搞定身份证号、手机号等敏感数据脱敏处理 &#x1f4a1; 创作目的&#xff1a;公司中CRM的第一版快封版了&#xff0c;基本功能都落实了。接下来就是预防等保了&#xff0c;我负责的是核心业务客户模块这里自然有很多数据要做脱敏。…