Работаю сейчас с LPC2378. Программа находится в FLASH, частота 73 МГц. С недавних пор программа стала вываливаться на прерывание data_handler (ошибка при чтении данных, когда используется несуществующий адрес). Точку сбоя найти удалось, там стоит обычная команда LDR R1, [PC, #+116]. По этой команде в регистр R1 должно загрузится значение 0x40000ED4 (по этому адресу находится локальная переменная), но загружается 0x20000F0, т.к. по такому адресу никакой памяти нет, то программы вываливается в data_handler. Причем в пошаговом режиме все работает нормально, а в режиме выполнения упорно загружается не то число. Прерывания отключены. Сбой имеет не совсем периодический характер, иногда этот участок кода нормально исполняется. Акселератор памяти был настроен как: MAMCR=0x02 (полный режим), MAMTIM=0x03 (при частоте > 40 МГц). Попробовал разные режимы, точки сбоя меняются на другие, иногда пропадают. Наличие сбоя так-же сильно зависит от самого кода, если например поставить перед сбойной командой команду NOP, то сбой может и прекратиться. Может кто-то сталкивался с подобным и может в этом быть в этом замешан модуль MAM?
|