Инициализация EEPROM

Тема в разделе "Arduino & Shields", создана пользователем DrProg, 22 июн 2015.

  1. DrProg

    DrProg Вечный нерд

    Есть некие данные, которые хранятся в EEPROM, вызываются по мере надобности, могут быть изменены в ходе работы скетча и так далее. Вопрос: как определить есть ли там корректные данные или там пока еще "мусор" (например первый запуск этого скетча на этой плате или уничтожение данных после ядерного взрыва).

    Если есть отработанное решение этого вопроса, то прошу подсказать. Мне же пока видится такой способ: пара байт отвести под некий "ключ", состояние которого проверяется при запуске, если "ключ" равен заданному, значит данные уже занесены, если не равен, то выполняется первичное занесение данных по умолчанию включая упомянутый "ключ". Вероятность совпадения мусора с "ключом" очень невелика, особенно если сделать его подлиннее, хотя бы до размера int. Верно ли я рассуждаю?
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    В целом верно. Это называется контрольная сумма. Просто складываете все байты и результат храните в отдельной ячейке. Для проверки снова складываете и сравниваете с этой ячейкой. Для пущей уверенности можно составить алгоритм вычисления контрольной суммы таким образом, что сумма никогда не будет равна нулю.
     
  3. DrProg

    DrProg Вечный нерд

    Контрольная сумма в этом случае интересное и универсальное решение. Но обязательно ли усложнять задачу, вычисляя сумму для проверки наличия осмысленных данных в памяти? Уникального набора из одного или более байт недостаточно?
     
    Последнее редактирование: 22 июн 2015
  4. Vittorio

    Vittorio Нуб

    Вот у этого чела сделано именно так: если в ячейке с адресом "0" записано определенное число, то считается что "некоторые данные" уже имеются в EEPROM и стартует обычная логика работы.
    Если заданного числа там нет, то стартует функция по первичному занесению данных (в данном случае запись мастер-метки).