nvsgen_example_main.c 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /* Non-Volatile Storage (NVS) Image Generation on Build Example
  2. *
  3. * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
  4. *
  5. * SPDX-License-Identifier: Unlicense OR CC0-1.0
  6. */
  7. #include <stdio.h>
  8. #include <inttypes.h>
  9. #include "freertos/FreeRTOS.h"
  10. #include "freertos/task.h"
  11. #include "esp_system.h"
  12. #include "esp_log.h"
  13. #include "nvs_flash.h"
  14. #include "nvs.h"
  15. static const char *TAG = "example";
  16. void app_main(void)
  17. {
  18. // Initialize NVS
  19. esp_err_t err = nvs_flash_init();
  20. if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
  21. // NVS partition was truncated and needs to be erased
  22. // Retry nvs_flash_init
  23. ESP_ERROR_CHECK(nvs_flash_erase());
  24. err = nvs_flash_init();
  25. }
  26. ESP_ERROR_CHECK(err);
  27. // Open the pre-filled NVS partition called "nvs"
  28. ESP_LOGI(TAG, "Opening Non-Volatile Storage (NVS) handle");
  29. nvs_handle_t my_handle;
  30. err = nvs_open_from_partition("nvs", "storage", NVS_READONLY, &my_handle);
  31. if (err != ESP_OK) {
  32. ESP_LOGE(TAG, "Error (%s) opening NVS handle!\n", esp_err_to_name(err));
  33. return;
  34. }
  35. ESP_LOGI(TAG, "The NVS handle successfully opened");
  36. // Read values
  37. ESP_LOGI(TAG, "Reading values from NVS");
  38. uint8_t u8_val = 0;
  39. err = nvs_get_u8(my_handle, "u8_key", &u8_val);
  40. ESP_ERROR_CHECK(err);
  41. printf("%"PRIu8"\n", u8_val);
  42. assert(u8_val == 255);
  43. int8_t i8_val = 0;
  44. err = nvs_get_i8(my_handle, "i8_key", &i8_val);
  45. ESP_ERROR_CHECK(err);
  46. printf("%"PRIi8"\n", i8_val);
  47. assert(i8_val == -128);
  48. uint16_t u16_val = 0;
  49. err = nvs_get_u16(my_handle, "u16_key", &u16_val);
  50. ESP_ERROR_CHECK(err);
  51. printf("%"PRIu16"\n", u16_val);
  52. assert(u16_val == 65535);
  53. uint32_t u32_val = 0;
  54. err = nvs_get_u32(my_handle, "u32_key", &u32_val);
  55. ESP_ERROR_CHECK(err);
  56. printf("%"PRIu32"\n", u32_val);
  57. assert(u32_val == 4294967295);
  58. int32_t i32_val = 0;
  59. err = nvs_get_i32(my_handle, "i32_key", &i32_val);
  60. ESP_ERROR_CHECK(err);
  61. printf("%"PRIi32"\n", i32_val);
  62. assert(i32_val == -2147483648);
  63. size_t str_len = 0;
  64. err = nvs_get_str(my_handle, "str_key", NULL, &str_len);
  65. ESP_ERROR_CHECK(err);
  66. assert(str_len == 222);
  67. char* str_val = (char*) malloc(str_len);
  68. err = nvs_get_str(my_handle, "str_key", str_val, &str_len);
  69. ESP_ERROR_CHECK(err);
  70. printf("%s\n", str_val);
  71. assert(str_val[0] == 'L');
  72. free(str_val);
  73. // Close
  74. nvs_close(my_handle);
  75. ESP_LOGI(TAG, "Reading values from NVS done - all OK");
  76. }