|
|
  |
Busfault Handler STM32L151RDT6, Адрес, на котором вылетает |
|
|
|
Nov 6 2015, 13:50
|

Гуру
     
Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702

|
Программа стабильно оказывается в Busfault Handler Значения регистров стабильно равны SCB->CFSR = 0x00008200 SCB->BFAR = 0x1800F267 Попадание в Busfault Handler совпадает по времени с запуском или работой DMA + SDIO ОС FreeRTOS Вопросы : 1) Правильно ли я понимаю, что 0x1800F267 это адрес, по которому программа попыталась вернутся из функции или прерывания, и не смогла, т.к. этот адрес не существующий ? 2) Верно ли предположение, что загрузка неправильного адреса в PC происходит пре переключении контекста ОС ? 3) Что делать дальше ? В какую сторону думать ? Заранее спасибо !
Эскизы прикрепленных изображений
--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
|
|
|
|
|
Nov 6 2015, 14:48
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(MiklPolikov @ Nov 6 2015, 16:50)  1) Правильно ли я понимаю, что 0x1800F267 это адрес, по которому программа попыталась вернутся из функции или прерывания, и не смогла, т.к. этот адрес не существующий ? Нет, это адрес, попытка доступа к которому вызвала исключение. Адрес инструкции, при выполнении которой случился bus fault, можно получить из stack frame.
|
|
|
|
|
Nov 6 2015, 20:19
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
QUOTE (Tarbal @ Nov 6 2015, 21:07)  Проверьте значение указателей и добейтесь чтобы они делились на 4. Это же кортекс, там нет арм режима. Поэтому младший битик д.б. равен 1
|
|
|
|
|
Nov 9 2015, 08:02
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Alechek @ Nov 9 2015, 12:53)  Притом что вылет, как правило, происходит в момент работы с семафорами/очередями. В том числе, в момент переключения контекста. Приходится выяснять, какой объект поганится, какие переменные лежат до/после него, потом смотреть, кто с этими переменными работает. Либо ставить бряку на диапазон адресов. И что? Проблема на 99.99% в пользовательском ПО. Если оно криво написано, то оно такое же кривое будет и без ОС. Наличие ОС не влияет на сложность поиска багов.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|