|
STM32 Обработка hard fault exception, Как правильно с ним работать |
|
|
|
Apr 8 2011, 10:57
|
Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 17-05-07
Пользователь №: 27 787

|
Цитата(aaarrr @ Apr 8 2011, 14:28)  В том-то и дело, что читает не ядро непосредственно, а контроллер флеш в свои внутренние буферы. И узнать, чем он занимается в данный момент, не представляется возможным. Ну да, верно. Строка-то, по сути, бессмысленная. Код исполняется из флеши, значит EEFC уже инициализирован загрузчиком.
|
|
|
|
|
Apr 8 2011, 15:39
|
Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 17-05-07
Пользователь №: 27 787

|
Цитата(aaarrr @ Apr 8 2011, 15:06)  Если программа стартует из флеш, то загрузчик не задействуется. Имел в виду rom boot. А что инициализирует этот регистр? При загрузке из флеши он проинициализирован.
|
|
|
|
|
Apr 8 2011, 16:13
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Атмег @ Apr 8 2011, 19:39)  Имел в виду rom boot. Процессор всегда стартует с нулевого адреса. Там может быть отмаплена флеш, если GNPVM 1 установлен, или ROM, если сброшен. В первом случае никакого лишнего кода не выполняется. Цитата(Атмег @ Apr 8 2011, 19:39)  А что инициализирует этот регистр? При загрузке из флеши он проинициализирован. В документации прописано значение по сбросу - 0x0. У вас оно отличается? Если да, то как смотрите?
|
|
|
|
|
Apr 8 2011, 17:28
|
Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 17-05-07
Пользователь №: 27 787

|
Цитата(aaarrr @ Apr 8 2011, 20:13)  Процессор всегда стартует с нулевого адреса. Там может быть отмаплена флеш, если GNPVM 1 установлен, или ROM, если сброшен. В первом случае никакого лишнего кода не выполняется.
В документации прописано значение по сбросу - 0x0. У вас оно отличается? Если да, то как смотрите? Да, правда, загрузчик то непричем. Отличается, смотрю отладчиком, хотите сказать, он и инициализирует?
|
|
|
|
|
Apr 12 2011, 22:02
|
Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 17-05-07
Пользователь №: 27 787

|
Да, вы были правы, действительно дело оказалось EEFC_FMR, но не в самом факте записи в регистр*, а в том что писалось туда 2 цикла, а при заданной частоте должно быть 3. Вроде пока сбоев не наблюдаю, видимо, в этом и было дело. Но Атмел реабилитирован лишь частично, это все из их стартапа пошло, второй раз уже с этим сталкиваюсь именно у Атмела (в прошлый раз была ошибка примере инициализации SDRAM). Именно так было в стартапе, частота выставлена 48 МГц, а в EEFC_FMR - 0х1, то есть два цикла.
*Изначально в регистре 0х0, то есть 1 цикл на чтение.
|
|
|
|
|
Apr 11 2014, 02:30
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 12-12-13
Пользователь №: 79 587

|
Цитата(pan_oleg @ Jan 5 2011, 15:31)  Код для STM32F101BT6 написаный на Си под IAR через определеное время работы по непонятным причинам вылетает в HardFaultException(void). Из флагов выставелся FORCED в HFSR регистре, и IBUSERR в регистре CFSR. Все что в доке нашел, что проблема с шиной. Но какая? Подскажите, как найти где в коде я накосячил. Какие регистры смотреть, что анализировать? Аналогичная ситуация, разве что контроллер STM32F407. Подскажите, в чем проблемма?
|
|
|
|
|
Apr 11 2014, 03:09
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Haamu @ Apr 11 2014, 04:30)  Подскажите, в чем проблемма? Поднимите глаза и перечитайте сообщение 37. У Атмег проблема была в недостаточном количестве тактов ожидания в контроллере флеша. Ваш же код на отладочной плате работает, значит 100% проблема в вашей аппаратной части - разводке и схеме.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|