mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-30 20:51:41 +00:00 
			
		
		
		
	 b988242b07
			
		
	
	b988242b07
	
	
	
		
			
			Showcases the use of `nvs_create_partition_image` CMake function Remove mentions of NVS multipage blob version 1 so it's not encouraged
		
			
				
	
	
		
			90 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Non-Volatile Storage (NVS) Image Generation on Build Example
 | |
|  *
 | |
|  * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
 | |
|  *
 | |
|  * SPDX-License-Identifier: Unlicense OR CC0-1.0
 | |
|  */
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <inttypes.h>
 | |
| #include "freertos/FreeRTOS.h"
 | |
| #include "freertos/task.h"
 | |
| #include "esp_system.h"
 | |
| #include "esp_log.h"
 | |
| #include "nvs_flash.h"
 | |
| #include "nvs.h"
 | |
| 
 | |
| static const char *TAG = "example";
 | |
| 
 | |
| void app_main(void)
 | |
| {
 | |
|     // Initialize NVS
 | |
|     esp_err_t err = nvs_flash_init();
 | |
|     if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
 | |
|         // NVS partition was truncated and needs to be erased
 | |
|         // Retry nvs_flash_init
 | |
|         ESP_ERROR_CHECK(nvs_flash_erase());
 | |
|         err = nvs_flash_init();
 | |
|     }
 | |
|     ESP_ERROR_CHECK(err);
 | |
| 
 | |
|     // Open the pre-filled NVS partition called "nvs"
 | |
|     ESP_LOGI(TAG, "Opening Non-Volatile Storage (NVS) handle");
 | |
|     nvs_handle_t my_handle;
 | |
|     err = nvs_open_from_partition("nvs", "storage", NVS_READONLY, &my_handle);
 | |
|     if (err != ESP_OK) {
 | |
|         ESP_LOGE(TAG, "Error (%s) opening NVS handle!\n", esp_err_to_name(err));
 | |
|         return;
 | |
|     }
 | |
|     ESP_LOGI(TAG, "The NVS handle successfully opened");
 | |
| 
 | |
|     // Read values
 | |
|     ESP_LOGI(TAG, "Reading values from NVS");
 | |
| 
 | |
|     uint8_t u8_val = 0;
 | |
|     err = nvs_get_u8(my_handle, "u8_key", &u8_val);
 | |
|     ESP_ERROR_CHECK(err);
 | |
|     printf("%"PRIu8"\n", u8_val);
 | |
|     assert(u8_val == 255);
 | |
| 
 | |
|     int8_t i8_val = 0;
 | |
|     err = nvs_get_i8(my_handle, "i8_key", &i8_val);
 | |
|     ESP_ERROR_CHECK(err);
 | |
|     printf("%"PRIi8"\n", i8_val);
 | |
|     assert(i8_val == -128);
 | |
| 
 | |
|     uint16_t u16_val = 0;
 | |
|     err = nvs_get_u16(my_handle, "u16_key", &u16_val);
 | |
|     ESP_ERROR_CHECK(err);
 | |
|     printf("%"PRIu16"\n", u16_val);
 | |
|     assert(u16_val == 65535);
 | |
| 
 | |
|     uint32_t u32_val = 0;
 | |
|     err = nvs_get_u32(my_handle, "u32_key", &u32_val);
 | |
|     ESP_ERROR_CHECK(err);
 | |
|     printf("%"PRIu32"\n", u32_val);
 | |
|     assert(u32_val == 4294967295);
 | |
| 
 | |
|     int32_t i32_val = 0;
 | |
|     err = nvs_get_i32(my_handle, "i32_key", &i32_val);
 | |
|     ESP_ERROR_CHECK(err);
 | |
|     printf("%"PRIi32"\n", i32_val);
 | |
|     assert(i32_val == -2147483648);
 | |
| 
 | |
|     size_t str_len = 0;
 | |
|     err = nvs_get_str(my_handle, "str_key", NULL, &str_len);
 | |
|     ESP_ERROR_CHECK(err);
 | |
|     assert(str_len == 222);
 | |
| 
 | |
|     char* str_val = (char*) malloc(str_len);
 | |
|     err = nvs_get_str(my_handle, "str_key", str_val, &str_len);
 | |
|     ESP_ERROR_CHECK(err);
 | |
|     printf("%s\n", str_val);
 | |
|     assert(str_val[0] == 'L');
 | |
|     free(str_val);
 | |
| 
 | |
|     // Close
 | |
|     nvs_close(my_handle);
 | |
|     ESP_LOGI(TAG, "Reading values from NVS done - all OK");
 | |
| }
 |