ESP32 NVS同windows文件系统的类比,附上一段NVS操作的代码解析
下面例程是在NVS区域记录ESP32重启次数。
源码是改写Hello_world官方例程:
#include <stdio.h>#include “sdkconfig.h”#include “freertos/FreeRTOS.h”#include “freertos/task.h”#include “esp_system.h”#include “esp_spi_flash.h”#include “nvs_flash.h” //michael add for NVS test#include “esp_log.h”//michael add for NVS test
void app_main(void){
vTaskDelay(1000/portTICK_PERIOD_MS);//阻止flash esp32后下面程序被立即执行 char * michael_nvs_namespace = “michael2”;//namespace类似windows的文件夹 nvs_flash_init(); nvs_handle_t michael_handle; nvs_open(michael_nvs_namespace,NVS_READWRITE,&michael_handle);//取得namespace句柄
uint32_t counter_val = 0;//value类似windows的文件内容 char * counter_key = “counter”;//key类似windows的文件名 nvs_get_u32(michael_handle,counter_key,&counter_val); ESP_LOGI(“nvs”,“KEY:VALUE %s:%d”,counter_key,counter_val);
counter_val = counter_val + 1; nvs_set_u32(michael_handle,counter_key,counter_val);
nvs_close(michael_handle); nvs_flash_deinit();
printf(“Hello world!\n”); /* Print chip information */ esp_chip_info_t chip_info; esp_chip_info(&chip_info); printf("This is %s chip with %d CPU core(s), WiFi%s%s, ", CONFIG_IDF_TARGET, chip_info.cores, (chip_info.features & CHIP_FEATURE_BT) ? “/BT” : “”, (chip_info.features & CHIP_FEATURE_BLE) ? “/BLE” : “”);
printf(“silicon revision %d, “, chip_info.revision);
printf(”%dMB %s flash\n”, spi_flash_get_chip_size() / (1024 * 1024), (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? “embedded” : “external”);
printf(“Minimum free heap size: %d bytes\n”, esp_get_minimum_free_heap_size());
for (int i = 10; i >= 0; i–) { printf(“Restarting in %d seconds…\n”, i); vTaskDelay(1000 / portTICK_PERIOD_MS); } printf(“Restarting now.\n”); fflush(stdout); esp_restart();}