Цитата
Покрутить тактирование, питание и посмотреть, будут ли изменения.
Про тактирование уже писали - сбрасывали до 100 кГц, результат такой же.
Сейчас проверили и с питанием - во всем диапазоне напряжений питания результат такой же.
Цитата
А там никаких конвейеров нигде не рушится? Если барьеров памяти и инструкций напихать, что будет?
Будем пробовать, т.к. на этом проекте падаем при возврате в основную функцию из вызываемой.
Цитата
Вы отладчиком в окне дизассемблера прошлись? Удалось найти инструкцию, на которой "всё падает"?
Да, и не раз. Повторюсь - при пошаговом исполнении из отладчика (s) программа работает до тех пор, пока пользователю не надоест запускать пошагово.
При запуске на исполнение из отладчика (g) - падаем вскоре после начала работы основной функции main.
В этом конкретном случае падаем в вызываемой функции putc, во втором вызове по ходу исполнения основной программы.
При первом вызове она отработала нормально.
Цитата
Ещё - проверьте стек. Может он у вас элементарно переполняется.
С переполнением стека сталкивались в самом начале. С тех пор стека МНОГО

MSP = 0x20014870 при запуске программы, MSP = 0x20013B00 при падении. Используется 0xD70 из выделенных 0x4000
Цитата
Вам нужно привести регистры сохранённые при стекинге при входе в fault.
R0 = 0x40002000, R1 = 0x00000052, R2 = 0x40002000, R3 = 0x000003e8
R12 = 0x2000084C, LR = 0x0800BE47, PC = 0x07FF4FBE, xPSR = 0x21000000
!!! PC улетает ниже области, где лежит программа( Но почему при первом вызове той же процедуры все работает???
Цитата
Обычно это (стек и PC) выставляется первым вектором таблицы прерывания, с которого CPU их считывает при подаче reset-а эмулятором.
По ресету управление передается на 0х0, где должен лежать загрузчик. Как в эмуляторе, так и на железе.
Цитата
Сам загрузчик не встроенный в МК что-ль???
Таки да. Микросхема ОКРовская, есть нюансы. Есть вывод, в зависимости от которого обращения в область 0х0-0х1000 отправляются либо на внешнюю шину, либо на внутреннюю ПЗУ с кодом загрузчика.