Цитата(yurmala @ Apr 27 2011, 09:10)

Приветствую! Планируется хранить некие настройки во внешнем EEPROM.
Естественно возник вопрос о гарантии достоверности прочитанных параметров. Всякое ведь может быть? Правильно?
Какой вариант для этого оптимален?
1) Подсчет одной контрольной суммы на весь массив параметров (записанных данных) и запись его в начало EEPROM перед массивом параметров.
2) Отдельная CRC Для каждого параметра (например +1 байт к каждому параметру размерностью U32).
3) ?
Правильно ли хранить CRC Тоже в EEPROM, если как раз в чтении из EEPROM "мы слегка сомневаемся"?
Какой алгоритм CRC (реализацию на Си) порекомендуете?
Какие еще есть ньюансы при хранении параметров в EEPROM?
Заранее спасибо за помощь.
Правильно все-таки говорить о просто контрольной сумме, а CRC это ее частный случай.
1. Нужно защититься от тривиальной ситуации "со всех адресов EEPROM читается одно и то же". Для этого в EEPROM должна быть записана какая-нибудь фраза, наличие которой проверяется програмой, ну скажем фраза "EEPROM"
2. Считаете контрольную сумму (КС) всей EEPROM и сравниваете с КС, записанной в той же EEPROM, если совпадает-то все в порядке.
Защищать по частям или нет- зависит от того, возможна ли работоспособность прибора при частичном слете EEPROM. То есть если возможно разделение данных на критичные и некритичные- то лучше защищать с помощью КС отдельно каждую область.
Насчет алгоритма подсчета КС- лучше всего CRC. как считать-зависит от того какой алгоритм быстрее работает на вашем железе. Некоторые микроконтроллеры имеют аппаратный вычислитель контрольных сумм, если это есть- однозначно нужно использовать.
Если считать программно CRC, то как правило табличное вычисление быстрее, но опять же смотреть нужно насколько. часто выигрыш незначительный и можно просто циклом посчитать.