#include #include "settings.h" namespace { constexpr const uint32_t FLASH_TARGET_OFFSET = PICO_FLASH_SIZE_BYTES - FLASH_SECTOR_SIZE; const uint8_t *flash_target_contents = (const uint8_t *) (XIP_BASE + FLASH_TARGET_OFFSET); } void flash_store_callback(void *settings) { int writeSize = (sizeof(struct Settings) / FLASH_PAGE_SIZE) + 1; flash_range_erase(FLASH_TARGET_OFFSET, FLASH_SECTOR_SIZE); flash_range_program(FLASH_TARGET_OFFSET, reinterpret_cast(settings), FLASH_PAGE_SIZE * writeSize); } void store_settings(Settings &settings) { uint8_t *settingsAsBytes = reinterpret_cast(&settings); flash_safe_execute(flash_store_callback, settingsAsBytes, 1000); } Settings read_settings() { Settings settings; memcpy(&settings, flash_target_contents, sizeof(struct Settings)); return settings; }