esp32-s3如何保存一个自定义状态,重新烧录也不会变
时间: 2024-03-08 13:46:41 浏览: 116
开发板ESP32-S3-Korvo-2 V3.0硬件原理图
ESP32-S3可以通过使用非易失性存储器(NVS)来保存自定义状态,即使重新烧录也不会丢失。
NVS是一个简单的键值存储系统,可以存储不同类型的数据,如整数,浮点数和字符串。ESP32-S3的NVS分为两个部分,分别为NVS分区和NVS命名空间。
NVS分区是Flash存储器中的一个逻辑部分,可以被用来存储应用程序数据。应用程序可以使用nvs_flash_init()函数初始化NVS分区,使用nvs_flash_erase()函数擦除NVS分区。
NVS命名空间是一个逻辑概念,用于在应用程序中组织和管理NVS键值对。应用程序可以使用nvs_open()函数打开一个NVS命名空间,使用nvs_set_*()函数存储键值对,使用nvs_get_*()函数读取键值对。
以下是一个示例代码,展示了如何使用NVS保存一个自定义状态。这个状态包含了一个整数值和一个字符串值。
```
#include "nvs_flash.h"
#include "nvs.h"
#define MY_NVS_NAMESPACE "my_nvs"
#define MY_INT_KEY "my_int"
#define MY_STRING_KEY "my_string"
void save_custom_state(int my_int, const char* my_string) {
// Initialize NVS
esp_err_t err = nvs_flash_init();
if (err != ESP_OK) {
return;
}
// Open NVS namespace
nvs_handle_t my_nvs_handle;
err = nvs_open(MY_NVS_NAMESPACE, NVS_READWRITE, &my_nvs_handle);
if (err != ESP_OK) {
return;
}
// Store values
err = nvs_set_i32(my_nvs_handle, MY_INT_KEY, my_int);
err = nvs_set_str(my_nvs_handle, MY_STRING_KEY, my_string);
// Commit changes
err = nvs_commit(my_nvs_handle);
// Close NVS namespace
nvs_close(my_nvs_handle);
// Deinitialize NVS
nvs_flash_deinit();
}
void load_custom_state(int* my_int, char* my_string, size_t max_len) {
// Initialize NVS
esp_err_t err = nvs_flash_init();
if (err != ESP_OK) {
return;
}
// Open NVS namespace
nvs_handle_t my_nvs_handle;
err = nvs_open(MY_NVS_NAMESPACE, NVS_READWRITE, &my_nvs_handle);
if (err != ESP_OK) {
return;
}
// Load values
err = nvs_get_i32(my_nvs_handle, MY_INT_KEY, my_int);
err = nvs_get_str(my_nvs_handle, MY_STRING_KEY, my_string, &max_len);
// Close NVS namespace
nvs_close(my_nvs_handle);
// Deinitialize NVS
nvs_flash_deinit();
}
```
在这个示例代码中,save_custom_state()函数用于保存自定义状态,load_custom_state()函数用于加载自定义状态。调用这些函数时,可以传递自定义整数和字符串值。这些值将被保存在NVS中,并且即使重新烧录也不会丢失。
阅读全文