После некоторых вариантов остановился на следующей схеме хранения настроек устройства в энергонезависимой памяти:
Имеем структуру с описанием всех полей настроек:
читать дальшеи переменную, реализующую её в памяти:
При запуске код загружает с еепрома настройки, смотрит содержание поля Magic и, если оно не равно заданному заранее в коде числу, то инициализирует все поля настроек значениями по умолчанию (в том числе и Magic) и сохраняет в еепром.
Работа с настройками проста и незамысловата. Если надо, читаем Settings.имя_поля. Если надо записать, пишем и сохраняем с помощью settings_Commit(), который переписывает изменившиеся поля настроек в энергонезависимой памяти.
Запись и чтение в контроллерах AVR, например, происходит так:
ee_UpdateBlock и ee_ReadBlock — это мои функции, объявленные обычно в файле drivers/eeprom.h
Но по сути они являются обёртками над функциями библиотеки eeprom_update_block и eeprom_read_block. Просто, чтоб не было в файлах логики привязки к платформозависимым библиотекам.
Использование:
Файлы:
settings.h
settings.c
@темы:
avr,
программизмы,
электроника