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

 
 
> Hard Fault Exception на кортексе м3, как узнать откуда прилезло
klen
сообщение Feb 4 2010, 10:37
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Здравствуйте.
работает программа на stm32f107 uIP+DHCP+HTTPD+TELNETD.

все просто замечательно работает, но не долго - минуту, через примерно одинаковый интервал времени - systick показывает очень близкие значения, все вываливается в HardFaultException с вероятностью 1. видимо гдето чето кончаетсо, буфер например. пытаюсь понять.

как высчитать в обработчике адрес с которого все это прилитело?

нагугленная конструкция
asm volatile ("MRS R0,PSP") ;
asm volatile ("LDR R1,[R0,#24] \n");
выдает чето мне непонятное.

спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Obam
сообщение Mar 31 2017, 07:46
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



А что, на брейкпойнте в точке входа в HF и под JTAGом, нельзя посмотреть содержимое регистров без портянки из printf-ов?
Просто интересуюсь…


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
juvf
сообщение Mar 31 2017, 08:30
Сообщение #3


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(Obam @ Mar 31 2017, 12:46) *
А что, на брейкпойнте в точке входа в HF и под JTAGом, нельзя посмотреть содержимое регистров без портянки из printf-ов?
Просто интересуюсь…
По мойму нельзя.
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Mar 31 2017, 09:02
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(juvf @ Mar 31 2017, 11:30) *
По мойму нельзя.

Можно. Более того есть смысл оформить обработчик так:
Код
void Default_Handler(void)
{
volatile int i = 1;
  while (i)
  {
  }
}

Тогда можно переменную i в отладчике поменять на 0 и пройтись до выхода из HardFault, выйдет как раз в место его возникновения, бывает очень удобно. Можно конечно адрес из стека вытащить, но так проще, удобней, нагляднее.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 31 2017, 09:13
Сообщение #5


Гуру
******

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



Цитата(Шаманъ @ Mar 31 2017, 11:02) *
Тогда можно переменную i в отладчике поменять на 0 и пройтись до выхода из HardFault, выйдет как раз в место его возникновения, бывает очень удобно. Можно конечно адрес из стека вытащить, но так проще, удобней, нагляднее.

У Cortex есть неточные ошибки с памятью (Imprecise Bus Fault). Так Вы их место не найдёте. А через регистры - найдёте.
Да и очень неудобно каждый раз вспоминать где какой стек, лучше иметь готовый код.
Не зря же даже в винде подобный обработчик сделали с регистрами и стеком (синий экран). Вот у меня как раз подобный для Cortex есть wink.gif

Цитата(Forger @ Mar 31 2017, 11:08) *
Все HF следует отлавливать еще на этапе отладки и прогона на месте, иначе грош-цена такому коду.
А вот для фиксации различных событий и т. п. следует использовать самописный или готовый журнал событий, который писать на внешнюю или внутр. флэшку.

Это конечно всё хорошо и правильно. Но на практике почему-то случаются такие ошибки (в том числе и HF), которые проявляются почему-то только у заказчика laughing.gif
Вот тут-то фиксация в журнал спасает (а особенно - в энергонезависимый).
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 31 2017, 09:32
Сообщение #6


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

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



Цитата(jcxz @ Mar 31 2017, 12:13) *
У Cortex есть неточные ошибки с памятью (Imprecise Bus Fault). Так Вы их место не найдёте. А через регистры - найдёте.
Да и очень неудобно каждый раз вспоминать где какой стек, лучше иметь готовый код.

А не надо думать про стек. При шаге - возврате из обработчика - попадете туда, откуда упали.

Цитата(jcxz @ Mar 31 2017, 12:13) *
Но на практике почему-то случаются такие ошибки (в том числе и HF), которые проявляются почему-то только у заказчика laughing.gif

Летом было. На скорую руку поправил одну функцию, типа, улучшил, по требованию. Проверил - работает, да и забыл про нее. Отправили 10 приборов в Нижний Новгород. Там они все "зависли намертво". Вернулись назад. Причину нашел быстро. Если бы там были лучшие умельцы, могли бы обновить программу сами. Но таковых не оказалось. Я уже заподозрил в попытке взлома... biggrin.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 31 2017, 09:46
Сообщение #7


Гуру
******

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



Цитата(ViKo @ Mar 31 2017, 11:32) *
А не надо думать про стек. При шаге - возврате из обработчика - попадете туда, откуда упали.

Не обязательно. Прочитайте про неточные ошибки с памятью. Fault может произойти через несколько команд после места ошибки. Когда уже может выполняться другая функция или даже другая задача ОС или ISR. Возвращаетесь так по LR, а в том месте даже команд обращения к памяти вообще нет. wink.gif

Цитата(ViKo @ Mar 31 2017, 11:32) *
Вернулись назад. Причину нашел быстро. Если бы там были лучшие умельцы, могли бы обновить программу сами. Но таковых не оказалось. Я уже заподозрил в попытке взлома... biggrin.gif

Надо делать удалённое обновление.

Цитата(Шаманъ @ Mar 31 2017, 11:38) *
ViKo уже ответил, все произойдет само - вернетесь туда откуда выпали, вне зависимости от используемого стека.

И Вам тоже - читать мануал на ядро Cortex-M. Плюс - набраться опыта в отладке и ловле fault-ов.
Или тут все только с Cortex-M0 работают где нет кешей и буферов отложенной записи и т.п.? Ну так и это ненадолго. cool.gif
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Mar 31 2017, 10:31
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(jcxz @ Mar 31 2017, 12:46) *
Не обязательно. Прочитайте про неточные ошибки с памятью. Fault может произойти через несколько команд после места ошибки. Когда уже может выполняться другая функция или даже другая задача ОС или ISR. Возвращаетесь так по LR, а в том месте даже команд обращения к памяти вообще нет. wink.gif
И Вам тоже - читать мануал на ядро Cortex-M. Плюс - набраться опыта в отладке и ловле fault-ов.
Или тут все только с Cortex-M0 работают где нет кешей и буферов отложенной записи и т.п.? Ну так и это ненадолго. cool.gif

Вы претендуете на наличие у Вас универсального решения? Так сказали "а", говорите "б" - рассказывайте, чтобы и кэши учитывались и несколько комманд и т.д., или Вы чисто поговорить?

Я на наличие универсального решения не претендовал. 99% разных fault отлавливаются приведенным выше алгоритмом. Если fault произошел не в той команде куда возвратились смотрим, что было до нее. Если совсем туго, то смотрим в регистр BFSR, оттуда можно почерпнуть полезной инфы в том числе произошла ли ошибка по адресу возврата или нет. Ну и если так ничего и не понятно через регистр ACTLR можно поотключать разные улучшатели и сделать из М7 почти что М0 wink.gif

Но, по моему опыту (М3/М7) обычно все отлавливается после возврата простым анализом 5..10 комманд до точки возврата.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 31 2017, 13:11
Сообщение #9


Гуру
******

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



Цитата(Шаманъ @ Mar 31 2017, 12:31) *
Вы претендуете на наличие у Вас универсального решения? Так сказали "а", говорите "б" - рассказывайте, чтобы и кэши учитывались и несколько комманд и т.д., или Вы чисто поговорить?

Читайте выше. Из соответствующих регистров можно прочитать реальный адрес где произошёл fault.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- klen   Hard Fault Exception на кортексе м3   Feb 4 2010, 10:37
- - klen   проблему я пофиксил - SNTP клиент косячил. все пре...   Feb 4 2010, 17:12
|- - AHTOXA   Вот так у меня сработало: Кодvoid hard_fault_hand...   Feb 5 2010, 11:23
|- - klen   очень хорошо будем смотреть в "бубен около ко...   Feb 5 2010, 14:45
|- - AHTOXA   Цитата(klen @ Feb 5 2010, 19:45) только с...   Feb 5 2010, 14:58
|- - klen   уря уря уря!!! naked действительно во ...   Feb 5 2010, 15:23
- - juvf   Выпадаю в Hard Fault Exception. описал обработчик...   Feb 25 2014, 18:54
|- - AHTOXA   Судя по Цитата(juvf @ Feb 26 2014, 00:54...   Feb 26 2014, 11:30
|- - jcxz   Цитата(AHTOXA @ Feb 26 2014, 17:30) Судя ...   Feb 27 2014, 02:20
|- - AHTOXA   Цитата(jcxz @ Feb 27 2014, 08:20) Почему ...   Feb 27 2014, 05:21
|- - jcxz   Цитата(AHTOXA @ Feb 27 2014, 11:21) Потом...   Feb 27 2014, 06:09
|- - Сергей Борщ   Цитата(jcxz @ Feb 27 2014, 08:09) Адрес в...   Feb 27 2014, 06:56
||- - jcxz   Функции как вызываются? Правильно: обычно через BL...   Feb 27 2014, 07:48
||- - Сергей Борщ   Цитата(jcxz @ Feb 27 2014, 09:48) BL что ...   Feb 27 2014, 09:51
||- - jcxz   Цитата(Сергей Борщ @ Feb 27 2014, 15:51) ...   Feb 27 2014, 11:42
|- - AHTOXA   Цитата(jcxz @ Feb 27 2014, 12:09) Адрес в...   Feb 27 2014, 08:46
|- - jcxz   Цитата(AHTOXA @ Feb 27 2014, 14:46) Судя ...   Feb 27 2014, 09:11
|- - AHTOXA   Цитата(jcxz @ Feb 27 2014, 15:11) И что? ...   Feb 27 2014, 10:54
|- - jcxz   Цитата(AHTOXA @ Feb 27 2014, 16:54) Потом...   Feb 27 2014, 11:51
|- - juvf   Цитата(jcxz @ Feb 27 2014, 16:51) если ад...   Feb 27 2014, 12:05
||- - jcxz   Цитата(juvf @ Feb 27 2014, 18:05) ну адре...   Feb 27 2014, 12:50
||- - juvf   Цитата(jcxz @ Feb 27 2014, 17:50) Если у ...   Feb 27 2014, 13:03
|- - AHTOXA   Цитата(juvf @ Feb 27 2014, 17:48) Думаю, ...   Feb 27 2014, 15:00
|- - jcxz   Цитата(AHTOXA @ Feb 27 2014, 21:00) При т...   Feb 28 2014, 02:32
|- - AHTOXA   Цитата(jcxz @ Feb 28 2014, 08:32) Вот тол...   Feb 28 2014, 04:36
|- - jcxz   Я с вами тоже   Feb 28 2014, 05:59
- - juvf   спасибо. перед 0x8002c09 такой код КодLDR R1, ...   Feb 26 2014, 12:28
|- - AHTOXA   Цитата(juvf @ Feb 26 2014, 18:28) перед 0...   Feb 26 2014, 12:54
|- - Axel   Цитата(juvf @ Feb 26 2014, 16:28) Подозре...   Feb 26 2014, 14:00
- - MALLOY2   Если это иар и используется его алокатор, то вам h...   Feb 26 2014, 12:47
- - ViKo   При прерываниях адрес возврата сохраняется в стек ...   Feb 27 2014, 05:51
- - juvf   Думаю, что я нашел граблю. я в одном потоке делаю ...   Feb 27 2014, 11:48
- - juvf   Давайте жить дружно   Feb 28 2014, 09:14
- - juvf   stm32L052 падает в HF пытаюсь сделать обработчик ...   Mar 30 2017, 15:27
|- - AHTOXA   Цитата(juvf @ Mar 30 2017, 20:27) Error[O...   Mar 30 2017, 16:10
|- - jcxz   Цитата(juvf @ Mar 30 2017, 17:27) препроц...   Mar 30 2017, 17:03
|- - juvf   Цитата(jcxz @ Mar 30 2017, 22:03) Препроц...   Mar 31 2017, 03:34
|- - Forger   Цитата(jcxz @ Mar 31 2017, 12:13) Вот тут...   Mar 31 2017, 09:17
||- - ViKo   Цитата(jcxz @ Mar 31 2017, 12:46) Не обяз...   Mar 31 2017, 10:07
|||- - jcxz   Цитата(ViKo @ Mar 31 2017, 12:07) Этот вы...   Mar 31 2017, 10:17
|||- - ViKo   Цитата(jcxz @ Mar 31 2017, 16:11) Читайте...   Mar 31 2017, 13:37
|||- - jcxz   Цитата(ViKo @ Mar 31 2017, 15:37) Только ...   Mar 31 2017, 14:34
||- - Forger   Цитата(Шаманъ @ Mar 31 2017, 13:31) Но, п...   Mar 31 2017, 13:39
|- - Шаманъ   Цитата(jcxz @ Mar 31 2017, 12:13) У Corte...   Mar 31 2017, 09:38
- - ViKo   Можно. Только, когда ошибка появляется в рабочем п...   Mar 31 2017, 08:14
|- - Forger   Цитата(ViKo @ Mar 31 2017, 11:14) Можно. ...   Mar 31 2017, 09:08
- - Obam   "…в рабочем приборе, вдалеке от отладчика…...   Mar 31 2017, 08:26
|- - ViKo   Цитата(Obam @ Mar 31 2017, 11:26) "…...   Mar 31 2017, 08:38
- - ViKo   Будем считать, что мне везло, и я всегда попадал и...   Mar 31 2017, 10:34
- - Шаманъ   Цитата(jcxz @ Mar 31 2017, 16:11) Читайте...   Mar 31 2017, 14:01
- - Forger   Цитата(Шаманъ @ Mar 31 2017, 17:01) Я обы...   Mar 31 2017, 14:11
- - Шаманъ   Цитата(Forger @ Mar 31 2017, 17:11) А я п...   Mar 31 2017, 14:35
- - Forger   Цитата(Шаманъ @ Mar 31 2017, 17:35) Но ра...   Mar 31 2017, 15:04
- - Шаманъ   Цитата(Forger @ Mar 31 2017, 18:04) Честн...   Mar 31 2017, 16:08
- - Forger   Цитата(Шаманъ @ Mar 31 2017, 19:08) У мен...   Mar 31 2017, 16:28
- - Шаманъ   Цитата(Forger @ Mar 31 2017, 19:28) Потом...   Mar 31 2017, 17:16
- - Forger   Цитата(Шаманъ @ Mar 31 2017, 20:16) В кон...   Mar 31 2017, 18:05


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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 00:51
Рейтинг@Mail.ru


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