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

 
 
> stm32 Hard fault
juvf
сообщение Jan 23 2016, 08:47
Сообщение #1


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

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



часто валиться hf. иногда указывает LR и PC на одно и тоже место.... но иногда на 0х0. Как отловить HF с LR и PC равным нулю?
Код
[Hard fault handler]
R0 = 0x20003d28
R1 = 0x20003db8
R2 = 0x20006230
R3 = 0x20006230
R12 = 0xa5a5a5a5
LR = 0x0
PC = 0x0
PSR = 0x4000000e
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sigmaN
сообщение Jan 26 2016, 23:21
Сообщение #2


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Цитата
на вскидку-как можно реже пользуйтесь кейловскими(иаровскими) библиотечными функциями..как максимум-только malloc/free,все остальное заменяйте собственными реализациями
это действительно обоснованный практикой совет или просто по-пугать?
Честно интересуюсь, без стёба.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 27 2016, 06:07
Сообщение #3


Гуру
******

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



Цитата(sigmaN @ Jan 27 2016, 02:21) *
это действительно обоснованный практикой совет или просто по-пугать?
Честно интересуюсь, без стёба.

Да нет особого стёба. Я написал свой printf. Точнее просто сделал п/п вывода чисел различных. В том числе с плавучкой.
Вы же должны понимать как стандартный работает. Там через список передаются параметры и шаблон вывода. Получается, что при обработке тратится значительное количество памяти на стеке.
Но проблема, если честно, не в самом объёме а в том, что это достаточно сильно меняющееся число. Ну и когда у вас несколько задач используют printf, то при анализе размеров стека понимаешь, что его надо увеличивать. В зависимости от сложности выводимой информации, народ указывает размеры до 2к. Вот и получается, что использование printf в трёх задачах - 6к озу.
Применение своих п/п вывода экономит эту память. В моём случае скорости особой не требовалось, так как это происходило при выводе на дисплей, принтер, ну и в HTTP задаче.

Никто не призывает отказываться от стандартных п/п. Просто надо знать инструмент, который применяешь. В случае с printf, надо автоматически увеличивать объём стека ну и убедится что вы выделили его достаточно. В частности FreeRTOS это позволяет делать.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 29 2016, 04:59
Сообщение #4


Гуру
******

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



Цитата(SasaVitebsk @ Jan 27 2016, 12:07) *
Но проблема, если честно, не в самом объёме а в том, что это достаточно сильно меняющееся число. Ну и когда у вас несколько задач используют printf, то при анализе размеров стека понимаешь, что его надо увеличивать. В зависимости от сложности выводимой информации, народ указывает размеры до 2к. Вот и получается, что использование printf в трёх задачах - 6к озу.
Применение своих п/п вывода экономит эту память. В моём случае скорости особой не требовалось, так как это происходило при выводе на дисплей, принтер, ну и в HTTP задаче.
Никто не призывает отказываться от стандартных п/п. Просто надо знать инструмент, который применяешь. В случае с printf, надо автоматически увеличивать объём стека ну и убедится что вы выделили его достаточно.

В многозадачной среде можно сделать переключение стека при вызове printf, естественно заблокировав его семафором.
Тогда не нужно закладывать дополнительный объём стека для printf для каждой задачи.
Go to the top of the page
 
+Quote Post
Forger
сообщение Jan 29 2016, 09:27
Сообщение #5


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

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(jcxz @ Jan 29 2016, 07:59) *
В многозадачной среде можно сделать переключение стека при вызове printf, естественно заблокировав его семафором.
Тогда не нужно закладывать дополнительный объём стека для printf для каждой задачи.

Такие штуки лучше выносить в отдельный классы, методы, функции, делая защиту однозадачных вещей внутри в одном месте.
Я использую отдельные классы-синглтоны, которые как бы везде видны, но существовать могут тока в одном экземпляре.
В этом случае код не зависит от способа вывода служебной информации - где послед. порт, где сам экран, где эзернет и т.д.
Позволяет дать имена более осмысленные и соответствущие требованиям конторы, чем некий prinf и им подобные наборы букв ))
Тогда код легко читаем и переносим. Копированием кусков с одного проекта в другой не требует их допиливания.
Не нужно писать бессмысленные комменты, которые тока путают.
У меня в коде комментов практически нет - код написан так, что легко вкурить что он делает даже через много месяцев...

Сорри за офф ))


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
juvf
сообщение Jan 29 2016, 09:48
Сообщение #6


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

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



Цитата(Forger @ Jan 29 2016, 14:27) *
Такие штуки лучше выносить в отдельный классы, методы, функции, делая защиту однозадачных вещей внутри в одном месте.
Я использую отдельные классы-синглтоны, ....

Оверинженеринг в вакууме.
Go to the top of the page
 
+Quote Post
Forger
сообщение Jan 29 2016, 10:30
Сообщение #7


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

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(juvf @ Jan 29 2016, 12:48) *
Оверинженеринг в вакууме.

Когда ушел в C++ на ARMах, в голый С не вернусь даже под дулом пистолета )))
Разница по размеру кода щас никого не волнует, да и нету там особой разныцы, зато читаемость и переносимость на порядки выше!
Скорость работы тоже не страдает. Я не использую исключения и работу с ними (пока что).
В обязательном порядке стоит ось, причем сделана обертка вокруг нее, чтобы она стала C++, ну, там классы потоков, программных таймеров, семафором и т.п.
Поменяю ось, поменяю обертку под нее, а весь остальной код во всех проектах вообще не изменится.
Так читаемость и переносимость кода возрастает в разы. Нет глубокой привязки ни к ядру, ни к процу, ни к компилятору, ни к оси.
Экономия времени на новых проектах просто чумовая!
Лень-матушка вынуждает так поступать - категорически ненавижу переделывать свою же работу, лучше сразу сделать нормально wink.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
juvf
сообщение Jan 29 2016, 14:21
Сообщение #8


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

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



Цитата(Forger @ Jan 29 2016, 15:30) *
В обязательном порядке стоит ось, причем сделана обертка вокруг нее, чтобы она стала C++, ну, там классы потоков, программных таймеров, семафором и т.п.
Ну я же говорю - Оверинженеринг. У меня все проекты на С++. Ос - FreeRTOS на си. ни каких обёрток. Там где надо ООП - я использую ООП... делаю классы, инкапсуляцию, наследование, полиморфизм, динамика.... А где надо printf, да ещё он нужен только в одном месте, а именно в обработчике HF - зачем эти синглтоны и обёртки?

Цитата
Короче, вот простое сравнение:
Детишки носятся на велосипедах, подрастают и пересаживаются на мопеды/моциклеты, потом личное авто, а у более успешных личный самолет
Если вам надо отъехать от дома на 10-20 км вы наверно на самолёте полетите.... а я на авто поеду... или даже на мопеде.


Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- juvf   stm32 Hard fault   Jan 23 2016, 08:47
- - KnightIgor   Что видно: - регистры R0..R3 указывают на память, ...   Jan 23 2016, 13:18
- - x893   Поставте нормальный обработчик HF и посмотрите под...   Jan 23 2016, 18:07
|- - juvf   Цитата(x893 @ Jan 23 2016, 23:07) Поставт...   Jan 24 2016, 06:09
|- - Непомнящий Евгений   Цитата(juvf @ Jan 24 2016, 09:09) Что ест...   Jan 26 2016, 05:47
|- - juvf   Цитата(Непомнящий Евгений @ Jan 26 2016, 10...   Jan 26 2016, 07:39
- - ViKo   Есть Fault регистры, по ним можно понять причину с...   Jan 24 2016, 08:51
- - ARMSTM   Всем привет. У меня тоже самое на stm32f103zet6. Н...   Jan 24 2016, 18:07
- - x893   Например 1 2 3 и еще 100500 описаний хэндлера   Jan 26 2016, 08:15
- - romas2010   Цитата(juvf @ Jan 23 2016, 11:47) часто в...   Jan 26 2016, 17:12
|- - scifi   Цитата(romas2010 @ Jan 26 2016, 20:12) на...   Jan 27 2016, 06:02
- - Quasar   Еще топикстартеру надо сверить ревизии, а то мало ...   Jan 26 2016, 17:28
|- - Непомнящий Евгений   Цитата(juvf @ Jan 29 2016, 12:48) Оверинж...   Jan 29 2016, 09:56
|- - scifi   Цитата(Forger @ Jan 29 2016, 13:30) Помен...   Jan 29 2016, 10:46
||- - Forger   Цитата(scifi @ Jan 29 2016, 13:46) Это и ...   Jan 29 2016, 10:52
||- - Непомнящий Евгений   Цитата(Forger @ Jan 29 2016, 13:52) Поэто...   Jan 29 2016, 11:10
||- - Forger   Цитата(Непомнящий Евгений @ Jan 29 2016, 14...   Jan 29 2016, 11:19
||- - scifi   Цитата(Forger @ Jan 29 2016, 14:19) Именн...   Jan 29 2016, 11:28
||- - Forger   Цитата(scifi @ Jan 29 2016, 14:28) Всё-та...   Jan 29 2016, 13:08
||- - Непомнящий Евгений   Цитата(Forger @ Jan 29 2016, 16:08) Чисты...   Jan 29 2016, 13:21
||- - Forger   Цитата(Непомнящий Евгений @ Jan 29 2016, 16...   Jan 29 2016, 13:31
- - Alechek   Видимо, речь идет про конкретный случай. Меня писа...   Jan 27 2016, 05:43
|- - Tarbal   Цитата(Alechek @ Jan 27 2016, 08:43) Види...   Jan 29 2016, 13:57
|- - Forger   Цитата(Tarbal @ Jan 29 2016, 16:57) На Ja...   Jan 29 2016, 14:38
- - sigmaN   Ну вот это уже более развернутый ответ касающийся ...   Jan 27 2016, 09:56


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

 


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


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