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

 
 
> STM32F407VET6. Свистопляска с HardFault-ами, Бесстстемные исключения HardFault
nanorobot
сообщение Dec 29 2015, 11:05
Сообщение #1


Местный
***

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



Может ли быть одной из причин HardFault износ ресурса флэш памяти? Имею макет с STM32F407VET6. Количество перезаписей солидное. Последнее время участилтсь случаи хардфаулта. ПРи вызове одной и той же прцедуры и в одной и той же ситуации - может быть, а может не бытью Под отладчиком редко, а без него практически всегда...
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 20)
scifi
сообщение Dec 29 2015, 11:22
Сообщение #2


Гуру
******

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



Что есть "солидное" число? 100? 1000? 10000? 100000? 1000000?
Опять же, нужно сделать обработчик hard fault, собрать всю имеющуюся информацию и точно установить причину.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Dec 29 2015, 16:03
Сообщение #3


Местный
***

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



Цитата(scifi @ Dec 29 2015, 17:22) *
Что есть "солидное" число? 100? 1000? 10000? 100000? 1000000?
Опять же, нужно сделать обработчик hard fault, собрать всю имеющуюся информацию и точно установить причину.

солидное число- чисто прикидочно 1000-1500. Обработчик сделан. Из зслуживающей(на мой взгляд) вничания инфрмвции имеем следующее:
в регистре UFSR(старшие 16 бит регистра CFSR) наиболее часто установлен бит INVSTATE, значительно реже имеем установленным бит UNDEFINSTR.
всегда только один из них. Регистр HFSR всегда имеет установленным бит FORCED. При пошаговой отладке однажды было замечено, что ХФ происходит
при выполнении невинной строки типа(последняя строка)

Код
bool ok;
uint16_t count;
uint16_t ChannelCount;
...
...
...

whille (!ok && (++count < ChannelCount))


Сообщение отредактировал nanorobot - Dec 29 2015, 16:05
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 29 2015, 16:46
Сообщение #4


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

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



Строку, содержащую whille никак нельзя назвать невинной rolleyes.gif
В ХФ улетает на конкретной ассемблерной команде. Вот ее надо найти, и крепко задуматься, отчего.
Go to the top of the page
 
+Quote Post
mantech
сообщение Dec 29 2015, 17:15
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(nanorobot @ Dec 29 2015, 19:03) *
солидное число- чисто прикидочно 1000-1500.


Писал и по 5000 раз - все нормально. Чип - VGT - тот, что на дискавери ставят. Сделайте подсчет контрольной суммы флеша, и сравнение с тем, что грузите, для того, чтобы убедиться, что не в нем проблема...

Сообщение отредактировал mantech - Dec 29 2015, 17:17
Go to the top of the page
 
+Quote Post
AndrejM
сообщение Dec 30 2015, 04:12
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 20-11-13
Пользователь №: 79 278



возьмите другую плату да проверьте.
у меня есть тоже запиленная до дыр discovery f429 , и подобные же спецэффекты не так давно начали проявляться , проблема судя по всему по питанию , ибо если на 0.1 V подать больше , то все работает.
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 30 2015, 05:11
Сообщение #7


Гуру
******

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



Цитата(nanorobot @ Dec 29 2015, 19:03) *
солидное число- чисто прикидочно 1000-1500.

Это совсем не солидное число.
Кстати, раз уж об этом зашла речь, там условия записи во флеш могут быть разные. В даташите написано "parallelism", напряжение питания. Если не соблюдать, то теоретически может недозаписаться. Или если стирание оборвали сбросом раньше времени. Тогда возможны плавающие биты. Но их можно обнаружить.
Go to the top of the page
 
+Quote Post
AlanDrakes
сообщение Dec 31 2015, 16:04
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474



Так же порекомендую проверить потребление питания. Возможно, задуматься о дополнительном питании (прямо на ножки питания 3V) от внешней LM1117-3.3 и тому подобных.
Похожая ситуация:
Контроллер посажен на АКБ -> LM1117 -> работает.
Контроллер посажен на БП (5V 2A) -> LM1117 -> Случайные сбросы и отказы программироваться.

Так же можно проверить ёмкости на плате.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jan 4 2016, 21:52
Сообщение #9


Местный
***

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



Цитата(AlanDrakes @ Dec 31 2015, 21:04) *
Так же можно проверить ёмкости на плате.


Исключил из процедуры вызов библиотечной функцмм pow() - заменил самописаной - наваждение прошло...
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 4 2016, 22:57
Сообщение #10


Гуру
******

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



Цитата(nanorobot @ Jan 5 2016, 00:52) *
Исключил из процедуры вызов библиотечной функцмм pow() - заменил самописаной - наваждение прошло...

А осадок остался.
Причина не найдена, что, скорее всего, означает, что глюк вернётся снова.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jan 5 2016, 09:02
Сообщение #11


Местный
***

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



Цитата(scifi @ Jan 5 2016, 03:57) *
А осадок остался.
Причина не найдена, что, скорее всего, означает, что глюк вернётся снова.

... накаркал. Типовая ситуация - в UFSR взводится бит INVSTATE, об'яснение из дефинитив гуиде - attempts to switch to an invalid state (e.g. ARM) - мож подтолкнете в верном направлении?

самое что убивает - при пошаговой отладке глюк практически никогда не воспроизводится
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 5 2016, 11:03
Сообщение #12


Гуру
******

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



Цитата(nanorobot @ Jan 5 2016, 12:02) *
... накаркал. Типовая ситуация - в UFSR взводится бит INVSTATE, об'яснение из дефинитив гуиде - attempts to switch to an invalid state (e.g. ARM) - мож подтолкнете в верном направлении?

Подталкиваю: нужно расшифровать всю информацию, доступную обработчику Hard Fault. Вычислить адрес инструкции, на которой проц спотыкается, посмотреть, что там.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jan 5 2016, 11:49
Сообщение #13


Местный
***

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



Цитата(scifi @ Jan 5 2016, 16:03) *
Подталкиваю: нужно расшифровать всю информацию, доступную обработчику Hard Fault. Вычислить адрес инструкции, на которой проц спотыкается, посмотреть, что там.

ощутил едва уловимый толчок...))

Сообщение отредактировал nanorobot - Jan 5 2016, 11:50
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jan 5 2016, 13:15
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(nanorobot @ Jan 5 2016, 12:49) *
ощутил едва уловимый толчок...))

К какой точке приложения? wink.gif.
TC: так где расчипятка актуального дампа hardfault? Если определится адрес слёта, берем карту памяти компоновщика, ищем, что там поблизости искомого адреса, находим тело функции. Потом можно под отладчиком там остановиться (даже если при этом не сгенерится исключение) и посмотреть, а нет ли там... рекурсии, которая съедает стек, которого, возможно, маловато будет! Как такая идейка?

Сообщение отредактировал KnightIgor - Jan 5 2016, 13:15
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 5 2016, 14:43
Сообщение #15


Гуру
******

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



Цитата(KnightIgor @ Jan 5 2016, 19:15) *
TC: так где расчипятка актуального дампа hardfault? Если определится адрес слёта, берем карту памяти компоновщика, ищем, что там поблизости искомого адреса, находим тело функции. Потом можно под отладчиком там остановиться (даже если при этом не сгенерится исключение) и посмотреть, а нет ли там... рекурсии, которая съедает стек, которого, возможно, маловато будет! Как такая идейка?

Кстати - есть ещё в природе отладчики с функцией трэйсера! Очень пользительная вещь в данном случае!
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jan 5 2016, 17:28
Сообщение #16


Местный
***

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



Цитата(jcxz @ Jan 5 2016, 19:43) *
Кстати - есть ещё в природе отладчики с функцией трэйсера! Очень пользительная вещь в данном случае!


CFSR = 0x20000
HFSR = 0x40000000
DFSR = 0x01
AFSR = 0x0
MMAR = 0xE000ED34
BFAR = 0xE000ED38
PSR = 0x60000000
LR = 0x800A1D7
R0 = 0x0
R1 = 0x2001D370
R2 = 0x2001D370
R12 = 0x0

LR содержит, если я правильно понимаю, адрес следующей инструкции по отношению к вызвавшей ХФ.
дизасм сотв фрагмента прилагаю. Судя по всему там содержатся сервисы ChibiOS, которую я использую.

Сообщение отредактировал IgorKossak - Jan 5 2016, 19:19
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 5 2016, 18:37
Сообщение #17


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

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



Стек для задач попробуйте увеличить.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jan 5 2016, 19:03
Сообщение #18


Местный
***

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



Цитата(ViKo @ Jan 5 2016, 23:37) *
Стек для задач попробуйте увеличить.


только что методом научного тыка проблема решилась, по крайней мере для данной процедуры. Процедура вызывается из треда(задачи) с приоритетом среднего уровня. В процедуре имеются локальные параметры. Я ко всем описаниям локальных параметров добавил спецификатор static. Проблема ушла. Хороший повод спросить более грамотных товарищей - имееи ли смысл об'являть статическими локальные переменные в процедуре вызываемой из треда(задачи), либо локальные переменные самого треда? По идее выхода из треда(имеется в виду связанной с ним процедуры) нет, значит локальные переменные не разрушаются и без статик.
вероятно Ваш совет к этой теме тоже имеет отношение, сейчас прпробую.
Благодарю Вас за ответ


Цитата(ViKo @ Jan 5 2016, 23:37) *
Стек для задач попробуйте увеличить.

Помогло. Премного благодарен. Успехов в новом году.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 8 2016, 12:40
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Квалификатор static указывает что переменную необходимо разместить глобально. В противном случае эта переменная будет размещена локально (то есть на стеке). Иными словами вы просто чуть уменьшили необходимый для задачи объём стека.
При использовании того или иного квалификатора надо чётко понимать зачем он нужен и как он работает. Здесь не может быть общих рекомендаций.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 8 2016, 12:53
Сообщение #20


Гуру
******

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



Цитата(SasaVitebsk @ Jan 8 2016, 15:40) *
При использовании того или иного квалификатора надо чётко понимать зачем он нужен и как он работает. Здесь не может быть общих рекомендаций.

Зато могут быть танцы с бубном: "static! спасибо, прошло."
smile3046.gif
Go to the top of the page
 
+Quote Post
Quasar
сообщение Jan 10 2016, 09:05
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 257
Регистрация: 2-12-06
Из: Default City
Пользователь №: 23 021



Цитата(nanorobot @ Jan 5 2016, 22:03) *
Я ко всем описаниям локальных параметров добавил спецификатор static. Проблема ушла. Хороший повод спросить более грамотных товарищей - имееи ли смысл об'являть статическими локальные переменные в процедуре вызываемой из треда(задачи), либо локальные переменные самого треда?


Побороли симптом.

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

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

 


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


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