Цитата(gormih @ Nov 5 2008, 15:18)

Не бывает такого, что программа работает полгода без сбоев, потом резко у нее портится настроение и дает сбой. Если конечно сам такого исхода не заложишь... Это чисто железная проблема. И случаи не еденичные.
Бывает еще как.
Ошибка в логике обработки переходного процесса... И допустить такую ошибку ой как легко, т.к. условия ее возникновения порой нельзя даже представить.
Суть даже не в eeprom'е, у меня портился NVRAM контекст (2 копии защищенных CRC16), причем как выяснилось портил я его сам при определенных условиях. А условия вот такие:
1. МК всегда безусловно пишет две копии контекста, в одном и том же порядке (вначале первую копию, потом вторую), по одним и тем же адресам NVRAM'а.
2. Питание проседает до 4.1, затем нарастает до 4.3 и так несколько раз подряд, а потом падает ниже 4.0. (BOD на 4.0).
3. Когда питание падает ниже 4.125V NVRAM уходит в себя (чтобы спасти RTC), тупо отрубается от I2C шины и ему пофиг идет транзакция или не идет в данный момент.
К чему это приводило:
Пусть МК успешно записал первую копию контекста, после чего в процессе записи второй копии напряжение проседает до 4.1V - МК естессно отваливает с ошибкой I2C timeout, пытается достучаться еще несколько раз, а девайса то просто нет на шине. Так портится вторая копия контекста в NVRAM'е.
Через некоторое время (через 1 сек) МК пробует сохранить обновленный контекст - питание к тому времени восстанавливается и NVRAM разлочен. МК начинает писать первую копию, в процессе записи питание падает ниже 4.0V - срабатывает BOD - и писец - обе копии контекста потеряны. Кто виноватъ? HW?
И сколько бы копий ни было вероятность потерять все копии остается, т.е. это БАГ ЛОГИКИ.
Спрашивается кто мешал прочитать контексты перед записью, кто мешал проверить какой из них жив, а какой - нет, и обновить только битую копию. Кто мешал промониторить питание, и даже не соваться к NVRAM'у когда ясно что он вот-вот отключится?