esp32s3-idf nvs的写入和读取
·
nvs是非易失性存储器,数据存放到flash里面,分区表里面有规定nvs的大小,起始地址,对于nvs的读写是分空间的,不同空间彼此独立(即A空间存入的数据不会影响B空间),在空间中写入键值对,即可完成数据的保存。
#include <stdio.h>
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_err.h"
#include "nvs.h"
#include "string.h"
#include "nvs_flash.h"
static const char* TAG = "main";
//定义命名空间1
#define NVS_BOB_NAMESPACE "Bob" //namespace最长15字节
//定义命名空间2
#define NVS_JOHN_NAMESPACE "John" //namespace最长15字节
//定义键值对
#define NVS_AGE_KEY "age" //年龄键名
#define NVS_SEX_KEY "sex" //性别键名
//命名空间的句柄
nvs_handle_t nvs_handle1=NULL;
nvs_handle_t nvs_handle2=NULL;
//定义读取数据的数组
char buffer[64];
//nvs_open_mode_t open_mode
void my_nvs_read(char *namespace,char *key,void *buffer,int maxlen,nvs_handle_t my_nvs_handle){
//读之前先初始化数组
memset(buffer,0,(size_t)sizeof(buffer));
size_t lenth;
//读取空间1
nvs_open(namespace,NVS_READWRITE,&my_nvs_handle);
//第一次读传入的地址为空,函数只返回lenth的值,后续可以根据lenth进行二次读取
nvs_get_blob(my_nvs_handle,key,NULL,&lenth);
if(lenth && lenth<= maxlen){
nvs_get_blob(my_nvs_handle,key,buffer,&lenth);
}
nvs_close(my_nvs_handle);
}
void my_nvs_write(char *namespace,nvs_handle_t my_nvs_handle,char *data,char *my_key){
nvs_open(namespace,NVS_READWRITE,&my_nvs_handle);
nvs_set_blob(my_nvs_handle,my_key,data,strlen(data));
nvs_commit(my_nvs_handle);
nvs_close(my_nvs_handle);
}
void my_nvs_init(){
esp_err_t err = nvs_flash_init();
if(err!=ESP_OK){
nvs_flash_erase();
//如果有错误会阻塞,不往下执行
ESP_ERROR_CHECK(nvs_flash_init());
}
}
void app_main(void)
{
my_nvs_init();
my_nvs_write(NVS_BOB_NAMESPACE,nvs_handle1,"woshi",NVS_AGE_KEY);
my_nvs_write(NVS_BOB_NAMESPACE,nvs_handle1,"wangshan",NVS_SEX_KEY);
my_nvs_write(NVS_JOHN_NAMESPACE,nvs_handle2,"woshi-3 ",NVS_AGE_KEY);
my_nvs_write(NVS_JOHN_NAMESPACE,nvs_handle2,"wangshan-3",NVS_SEX_KEY);
// //打开空间1
// nvs_open(NVS_BOB_NAMESPACE,NVS_READWRITE,&nvs_handle1);
// //空间1写入数据
// nvs_set_blob(nvs_handle1,NVS_AGE_KEY,"woshi",strlen("woshi"));
// nvs_set_blob(nvs_handle1,NVS_SEX_KEY,"wangshan",strlen("wangshan"));
// nvs_commit(nvs_handle1);
// nvs_close(nvs_handle1);
//打开空间2
// nvs_open(NVS_JOHN_NAMESPACE,NVS_READWRITE,&nvs_handle2);
// //空间2写入数据
// nvs_set_blob(nvs_handle2,NVS_AGE_KEY,"woshi-2",strlen("woshi-2"));
// nvs_set_blob(nvs_handle2,NVS_SEX_KEY,"wangshan-2",strlen("wangshan-2"));
// nvs_commit(nvs_handle2);
// nvs_close(nvs_handle2);
//读取空间1
my_nvs_read(NVS_BOB_NAMESPACE,NVS_AGE_KEY,buffer,64,nvs_handle1);
ESP_LOGI(TAG,"Read data:%s",buffer);
my_nvs_read(NVS_BOB_NAMESPACE,NVS_SEX_KEY,buffer,64,nvs_handle1);
ESP_LOGI(TAG,"Read data:%s",buffer);
my_nvs_read(NVS_JOHN_NAMESPACE,NVS_AGE_KEY,buffer,64,nvs_handle2);
ESP_LOGI(TAG,"Read data:%s",buffer);
my_nvs_read(NVS_JOHN_NAMESPACE,NVS_SEX_KEY,buffer,64,nvs_handle2);
ESP_LOGI(TAG,"Read data:%s",buffer);
}
更多推荐
所有评论(0)