реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> STM32L151 Hardfault как найти причину ?
x893
сообщение Mar 10 2016, 10:10
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Для FreeRTOS использовал Percepio - полезная программа оказалась
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 10 2016, 10:16
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Сергей Борщ @ Mar 2 2016, 04:46) *
Обнаружив прграмму в этом цикле переключаюсь в режим дизассемблера, изменяю значение i на 1 и выхожу из исключения. Попадаю на вызвавшую исключение команду. Дальше уже головой.

Раз получено "Imprecise data bus error", значит попадёте скорей всего не на вызвавшую исключение команду, а где-то немного после неё.
Надо просмотреть ближайшие предыдущие десяток команд с обращением к памяти от этого места - где-то скорей всего есть обращение к несуществующей памяти.
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 10 2016, 11:32
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(jcxz @ Mar 10 2016, 13:16) *
Раз получено "Imprecise data bus error"

У меня такое на FreeRTOS было из-за неправильных приоритетов.
Не все функции ОС могут быть выполнены в прерываниях с высоким приоритетом.
Из-за этого нарушалось целостность объектов, а это как следствие приводило в том числе и к "Imprecise data bus error".
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 10 2016, 11:44
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(jcxz @ Mar 10 2016, 13:16) *
Раз получено "Imprecise data bus error", значит попадёте скорей всего не на вызвавшую исключение команду, а где-то немного после неё.

Вот тут товарищ советует отключить кеширование записи в память, и тогда imprecise превратится в precise, а регистры будут указывать точно на ту инструкцию, которая виновата. Если ревизия проца не слишком старая и позволяет это сделать, конечно. Какая ревизия у STM32L151 - не знаю.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 22 2016, 11:22
Сообщение #20


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Сергей Борщ @ Mar 3 2016, 15:12) *
Я использую достаточно умные компиляторы, они не ставят BX после бесконечного цикла.

Тогда так:
Код
__asm void HardFault_Handler(void)
{
  B .
  BX LR
}

Гениально просто? rolleyes.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 22 2016, 11:26
Сообщение #21


Гуру
******

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



Цитата(ViKo @ Mar 22 2016, 13:22) *
Гениально просто? rolleyes.gif
Но зачем?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 22 2016, 11:38
Сообщение #22


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Сергей Борщ @ Mar 22 2016, 14:26) *
Но зачем?

Затем, что так проще, чем манипулировать i. Меньше команд. Меньше мышедвижений, клавиатуру давить совсем не нужно. В отладчике "Установить программный счетчик сюда", и все.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 22 2016, 12:15
Сообщение #23


Гуру
******

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



Цитата(ViKo @ Mar 22 2016, 13:38) *
Затем, что так проще, чем манипулировать i. Меньше команд. Меньше мышедвижений, клавиатуру давить совсем не нужно. В отладчике "Установить программный счетчик сюда", и все.
Я тоже могу в отладчике "установить программный счетчик сюда" и все. 2 или 6 команд используются в этом месте - меня не волнует абсолютно. В отладочной версии куча диагностики, которая занимает на несколько порядков больше места. Так что никаких объективных причин использовать тут встроенный ассемблер я не вижу. Ваше желание впихнуть ассемблер куда попало мне известно, я этим не страдаю.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 22 2016, 12:24
Сообщение #24


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Я редко использую ассемблер. В данном случае я довел вашу идею до совершенства. Мне нравится, полагаю, и не только мне понравится. 4 байта!
Зачем спорите? Можете пользоваться своей функцией, никто руки же не выкручивает.
P.S. Вы же статейку приводили, где одного байта не хватило. rolleyes.gif
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 22 2016, 13:07
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ViKo @ Mar 22 2016, 15:24) *
4 байта!
Подсчёт байтов - это болезнь! 1111493779.gif
Цитата(ViKo @ Mar 22 2016, 15:24) *
4 байта!P.S. Вы же статейку приводили, где одного байта не хватило. rolleyes.gif
Притягивание аргумента за уши - это не болезнь, но тоже нехорошо laughing.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 22 2016, 13:26
Сообщение #26


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(scifi @ Mar 22 2016, 16:07) *
Подсчёт байтов - это болезнь!
Притягивание аргумента за уши - это не болезнь, но тоже нехорошо

От вас, scifi, не ожидал. biggrin.gif
Это не болезнь, а хобби.
Какой-такой аргумент? Разве мне нужно что-то доказывать? Просто принес подарок. santa2.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 22 2016, 13:32
Сообщение #27


Гуру
******

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



Да, пожалуй, я погорячился. Приношу извинения.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 22 2016, 15:22
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ViKo @ Mar 22 2016, 16:26) *
Это не болезнь, а хобби.

Хобби не возбраняется, прошу пардону biggrin.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 22 2016, 16:10
Сообщение #29


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Ишь, прямо эпидемия извинений. beer.gif
У предложенного обработчика есть еще одно достоинство - он не портит регистры. Кроме тех, что уже испорчены самим исключением - PC, SP, LR. Не надо лезть в стек, они и так на виду.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 22 2016, 16:16
Сообщение #30


Гуру
******

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



Цитата(ViKo @ Mar 22 2016, 18:10) *
У предложенного обработчика есть еще одно достоинство - он не портит регистры.
А смысл в значениях этих регистров пока мы не знаем, откуда попали в исключение? В момент выхода по BX содержимое испорченных регистров будет автоматически восстановлено из стека.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 01:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01512 секунд с 7
ELECTRONIX ©2004-2016