FDA (23.04.2013 13:17, просмотров: 133) ответил DragonS на Очень схожая ситуация. У меня устройства с ATmega88.
У меня была похожая проблема с PIC18F4550, когда я перешёл с компилятора HT-PIC на XC8. В пике был загрузчик и была основная программа. После подачи питания пик проверял кое-какие данные в встроенной EEPROM и в зависимости от значений должен был или запустить основную программу или ждать её загрузки по UART. Кроме этого имеется возможность переключения из основной программы в режим загрузчика по специальной команде (для обновления ПО).
Так вот было замечено, что на прошивке, которая просто была перекомпилирована в XC8 иногда случались глюки, а именно в нужные ячейки EEPROM писались левые значения. Эта проблема была на всех платах, причём если залить старую прошивку, проблема не проявлялась. То есть дело 100% в программе. Опытным путём я пришёл к выводу, что содержимое ячеек EEPROM портилось при их ЧТЕНИИ. В программе были убраны все операции записи, так что дело не в них! Для работы с EEPROM использовались встроенные функции компилятора eeprom_read, eeprom_write. Самое интересное, что для других пиков этот загрузчик работал без проблем!
Решение я нашёл только одно - написал свою функцию для чтения из EEPROM:
char ReadEEP (char addr)
{
while (EECON1bits.WR) CLRWDT();
return eeprom_read(addr);
}
Здесь я также использую встроенную, но предваряю её вызов проверкой флага занятости. После этого всё работает безупречно! Как проверка флага ожидания окончания ЗАПИСИ влияет на ЧТЕНИЕ так и осталось загадкой!