Чего-то вы тут реляционную БД уже насоветуете... Красота в
простоте! Как делаю я... В качестве епром иcпользуется FRAM.
Код.
описываю структуру епром
typedef struct
{
int32 a;
int16 b;
int8 c;
int8 CRC;
}Eprom_t;
Дефайнами определяю значения инициализации.
#define Def_a (10)
#define Def_b (20)
#define Def_c (30)
объявляю два экземпляра структуры один глобальный, один статический
Eprom_t Eprom;
static Eprom_t EpromOld;
Ну и соответственно методы.
Конструктор, вызывается пр старте МК, загружает в из епром оба экземпляра, проверяет их CRC, если СRC не сходится у одного, он востанавливается по другому. Если повреждены оба, или первый старт, то загружаются значения по умолчанию, дописывается CRC.
Главный метод, вызывается в суперлупе, сравнивает оба экземпляра, если имеется расхождение то сохраняются оба экземпляра с CRC.
В результате обращение к Епром идет как к обычным переменным.
Протестированно десятилетиями.