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

 
 
> Прошу помощи с STM32F051, Периодическое сваливание в HardFault
nanorobot
сообщение Aug 8 2014, 18:41
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Отлаживаю дивайс на STM32F051. интенсивно используется DMA - все каналы. Периодически (1 раз в 1- 4 часа) происходит HardFault.Ввел обработчик ХардФаулт из Definitive Guide, получил листинг регистров. Не могу полноценно осознать результаты. Судя по содержимому PC, инструкция, вызвавшая HardFault была расположена в RAM. Непонятно. Указатели на функции не использую.
Во вложении кусочек скриншота с регистрами.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Aug 9 2014, 10:06
Сообщение #2


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

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



Причина HardFault описана в Fault регистрах. В той же книге они описаны. Я всегда сначала там роюсь, а потом адрес, с которого улетел, смотрю.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Aug 9 2014, 10:18
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(ViKo @ Aug 9 2014, 16:06) *
Причина HardFault описана в Fault регистрах. В той же книге они описаны. Я всегда сначала там роюсь, а потом адрес, с которого улетел, смотрю.



Если Вы имеете в виду регистры CFSR и HFSR то в M0 их нет, только в M3/M4. А адрес с которого улетело, есть адрес в области RAM. Программа же расположена во FLASH, и не использует никаких трюков с выполнением из RAM и указателей на функции. Отсюда мой ступор.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 9 2014, 15:25
Сообщение #4


Гуру
******

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



Цитата(nanorobot @ Aug 9 2014, 16:18) *
Если Вы имеете в виду регистры CFSR и HFSR то в M0 их нет, только в M3/M4. А адрес с которого улетело, есть адрес в области RAM. Программа же расположена во FLASH, и не использует никаких трюков с выполнением из RAM и указателей на функции. Отсюда мой ступор.

Это и не обязательно. Cortex может сохранять адреса возврата из функций на стеке. Если Вы его каким-либо образом разрушаете, то при попытке возврата выполнение может
улететь куда угодно (или сразу в fault).

Цитата(KnightIgor @ Aug 9 2014, 17:17) *
Явно в какой-то процедуре затирается стек (LR странный)

Там не только LR странный, но и PSR к примеру.
Сдаётся мне, что это никакое не содержимое регистров в момент fault-a, а просто ТС привёл нам мусор. wink.gif
Вот например, что выдаёт мой обработчик критических ошибок при возникновении
BUS FAULT: неточная ошибка при обращении к данным (imprecise data bus error) (ловушка 123):
Прикрепленное изображение

Всё чётко видно где произошло, при каких регистрах и стеке.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Aug 9 2014, 16:44
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(jcxz @ Aug 9 2014, 21:25) *
...



Если быть точным, это не регистры, а их копии лежащие в верхушке стека, т.е. их состояния на момент HardFault. Если я намеренно привожу ситуацию к HardFault - все регистры (их копии в стеке) выглядят вполне пристойно.

Сообщение отредактировал IgorKossak - Aug 9 2014, 18:30
Причина редактирования: избыточное цитирование
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 9 2014, 18:32
Сообщение #6


Гуру
******

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



Цитата(nanorobot @ Aug 9 2014, 22:44) *
Если быть точным, это не регистры, а их копии лежащие в верхушке стека, т.е. их состояния на момент HardFault. Если я намеренно привожу ситуацию к HardFault - все регистры (их копии в стеке) выглядят вполне пристойно.

Пристойно? И 24й бит PSR тоже?
И биты 0...8 тоже? А ведь они говорят, что этот fault у вас случился типа внутри ISR с номером 0x160. У вашего M0 столько источников прерываний??? Я даже у M3 более примерно полусотни-то не видел....
То что Вы приводите не имеет никакого отношения к регистрам либо "их копиям в верхушке стека".
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Aug 9 2014, 18:35
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(jcxz @ Aug 10 2014, 00:22) *
Пристойно? И 24й бит PSR тоже?
То что Вы приводите не имеет никакого отношения к регистрам либо "их копиям в верхушке стека".


Извините, если что не так. Вы меня неправильно поняли. "Пристойно" они выглядят не в приведенном случае, а в том, когда я программно создаю ситуацию HardFault от кнопки.
а текущий случай не укладывается ни в какие рамки. Возможно ситуация осложнена модификацией стека, или чем либо еще, но она именно такова.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 9 2014, 18:50
Сообщение #8


Гуру
******

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



Тогда эта модификация стека произошла в вашем обработчике HardFault.
Вы же вроде пытаетесь привести результат стекинга на входе в HardFault?
Вот как раз такого результата быть не может, как я вам выше уже показал.
Скорей всего Вы неправильно определили положение верхушки стека прерванной программы.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- nanorobot   Прошу помощи с STM32F051   Aug 8 2014, 18:41
- - adnega   Стека точно хватает?   Aug 8 2014, 19:22
|- - nanorobot   Цитата(adnega @ Aug 9 2014, 01:22) Стека ...   Aug 8 2014, 19:25
- - Golikov A.   так сгенерите карту памяти, и поглядите. Если огро...   Aug 9 2014, 06:15
- - nanorobot   увеличил размер стека в 1.5 раза. не помогло.   Aug 9 2014, 09:21
|- - nanorobot   Цитата(jcxz @ Aug 10 2014, 00:50) Тогда э...   Aug 9 2014, 19:21
|- - ViKo   Цитата(nanorobot @ Aug 9 2014, 22:21) Осо...   Aug 9 2014, 20:50
- - ViKo   С CM0 знаком меньше. Может, таблица векторов преры...   Aug 9 2014, 10:33
- - KnightIgor   Цитата(nanorobot @ Aug 8 2014, 20:41) Отл...   Aug 9 2014, 11:17
|- - nanorobot   Цитата(KnightIgor @ Aug 9 2014, 17:17) .....   Aug 9 2014, 11:23
- - nanorobot   Со стеком разобрался. Нашел точку в которой происх...   Aug 9 2014, 20:47
|- - KnightIgor   Цитата(nanorobot @ Aug 9 2014, 22:47) Точ...   Aug 10 2014, 12:21
|- - Сергей Борщ   Цитата(KnightIgor @ Aug 10 2014, 15:21) Т...   Aug 10 2014, 14:57
||- - KnightIgor   Цитата(Сергей Борщ @ Aug 10 2014, 16:57) ...   Aug 10 2014, 16:49
||- - Сергей Борщ   Цитата(KnightIgor @ Aug 10 2014, 19:49) У...   Aug 11 2014, 08:43
||- - jcxz   Цитата(Сергей Борщ @ Aug 11 2014, 14:43) ...   Aug 11 2014, 09:11
||- - KnightIgor   Цитата(Сергей Борщ @ Aug 11 2014, 10:43) ...   Aug 12 2014, 10:08
||- - Сергей Борщ   Цитата(KnightIgor @ Aug 12 2014, 13:08) в...   Aug 12 2014, 11:39
||- - KnightIgor   Цитата(Сергей Борщ @ Aug 12 2014, 13:39) ...   Aug 12 2014, 12:33
||- - Сергей Борщ   Цитата(KnightIgor @ Aug 12 2014, 15:33) н...   Aug 12 2014, 17:39
|- - nanorobot   Цитата(KnightIgor @ Aug 10 2014, 18:21) Г...   Aug 10 2014, 15:14
|- - MiklPolikov   Очень интересная тема ! Подскажите, нет ли в и...   Aug 17 2014, 11:18
|- - adnega   Цитата(MiklPolikov @ Aug 17 2014, 15:18) ...   Aug 17 2014, 11:45
|- - MiklPolikov   Цитата(adnega @ Aug 17 2014, 15:45) Почем...   Aug 17 2014, 11:54
|- - adnega   Цитата(MiklPolikov @ Aug 17 2014, 15:54) ...   Aug 17 2014, 13:46
- - nanorobot   Thank. День прожит не зря. ))   Aug 9 2014, 21:03
- - Golikov A.   вроде как-то уже такое обсуждали, но так и не смог...   Aug 11 2014, 09:59
|- - jcxz   Не правы. Здесь совсем о другом разговор. Почитайт...   Aug 11 2014, 10:11
- - Golikov A.   ну типа Кодchar Array[10]; int *p = ...   Aug 17 2014, 14:07
|- - adnega   Цитата(Golikov A. @ Aug 17 2014, 18:07) н...   Aug 17 2014, 14:36
|- - Сергей Борщ   Цитата(Golikov A. @ Aug 17 2014, 17:07) Н...   Aug 17 2014, 22:22
|- - KnightIgor   Цитата(Сергей Борщ @ Aug 18 2014, 00:22) ...   Aug 18 2014, 07:50
|- - Сергей Борщ   Цитата(KnightIgor @ Aug 18 2014, 10:50) К...   Aug 18 2014, 09:56
|- - KnightIgor   Цитата(Сергей Борщ @ Aug 18 2014, 11:56) ...   Aug 18 2014, 12:31
|- - Сергей Борщ   Цитата(KnightIgor @ Aug 18 2014, 15:31) Н...   Aug 18 2014, 12:48
|- - LightElf   QUOTE (KnightIgor @ Aug 18 2014, 16:31) Я...   Aug 18 2014, 13:13
|- - KnightIgor   Цитата(LightElf @ Aug 18 2014, 15:13) До ...   Aug 18 2014, 14:45
|- - Сергей Борщ   Цитата(KnightIgor @ Aug 18 2014, 17:45) Е...   Aug 18 2014, 15:09
||- - KnightIgor   Цитата(Сергей Борщ @ Aug 18 2014, 17:09) ...   Aug 18 2014, 16:31
|- - LightElf   QUOTE (KnightIgor @ Aug 18 2014, 18:45) К...   Aug 19 2014, 07:30
- - Golikov A.   это же условно... может же быть входной байтовый...   Aug 17 2014, 17:11
|- - adnega   Цитата(Golikov A. @ Aug 17 2014, 21:11) э...   Aug 17 2014, 20:45
- - Golikov A.   если тот кто пишет прошивку об этом знает и следит...   Aug 18 2014, 07:00
|- - adnega   Цитата(Golikov A. @ Aug 18 2014, 11:00) П...   Aug 18 2014, 07:38
- - Golikov A.   ЦитатаПочему вы упорно валите с больной головы на ...   Aug 18 2014, 11:39
|- - Tahoe   Цитата(Golikov A. @ Aug 18 2014, 15:39) п...   Aug 19 2014, 03:16
- - Golikov A.   ЦитатаИз указателя на int делать указатель на char...   Aug 18 2014, 15:37
- - Golikov A.   даже в мего защищенном С# есть object и var. Так ч...   Aug 19 2014, 05:05
|- - Сергей Борщ   Цитата(KnightIgor @ Aug 18 2014, 19:31) С...   Aug 19 2014, 06:10
||- - KnightIgor   Цитата(Сергей Борщ @ Aug 19 2014, 08:10) ...   Aug 19 2014, 08:21
||- - LightElf   QUOTE (KnightIgor @ Aug 19 2014, 12:21) Я...   Aug 19 2014, 10:29
||- - LightElf   QUOTE (KnightIgor @ Aug 19 2014, 12:21) Т...   Aug 21 2014, 11:51
||- - MiklPolikov   Подскажите пожалуйста, как увидеть карту занятости...   Aug 26 2014, 11:54
|- - Tahoe   Цитата(Golikov A. @ Aug 19 2014, 09:05) В...   Aug 20 2014, 05:39
- - Golikov A.   Сергей Борщ очень правильно указал зачем применяет...   Aug 19 2014, 19:40
- - Golikov A.   А вы по специальности работали? ... мне вот очень...   Aug 20 2014, 07:28
|- - Tahoe   Цитата(Golikov A. @ Aug 20 2014, 11:28) м...   Aug 20 2014, 08:30
- - Golikov A.   ЦитатаСдаюсь. Видимо, умение программировать дано ...   Aug 20 2014, 08:44
|- - Tahoe   Цитата(Golikov A. @ Aug 20 2014, 12:44) п...   Aug 20 2014, 10:46
- - Golikov A.   ну в целом все как бы ясно, и про вас и про ваш по...   Aug 20 2014, 11:24
- - Tahoe   Согласен. Потихоньку слиться - лучшее, что можно с...   Aug 20 2014, 12:17
- - Golikov A.   если опустить маалоки и рекурсию, то надо поставит...   Aug 26 2014, 12:22


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 01:31
Рейтинг@Mail.ru


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