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

 
 
> 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
scifi
сообщение Jan 29 2016, 10:46
Сообщение #8


Гуру
******

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



Цитата(Forger @ Jan 29 2016, 13:30) *
Поменяю ось, поменяю обертку под нее, а весь остальной код во всех проектах вообще не изменится.

Это и старый добрый Си умеет.
Вам нравится Си++ - почему бы и нет? Может быть, у меня просто такие проекты, но ни разу не ощущал потребности перейти на Си++. А просто так без причины как-то не хочется.
Go to the top of the page
 
+Quote Post
Forger
сообщение Jan 29 2016, 10:52
Сообщение #9


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

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



Цитата(scifi @ Jan 29 2016, 13:46) *
Это и старый добрый Си умеет.
Это даже можно на асме сделать ))
Тока переход в плюсы - это переход на новый уровень структурного, а не функционального программирования.
Чистый С хоть и позволяет это делать, но с такими ацкими костылями, что боже упаси это недобровольный "секас" wacko.gif


Цитата
Вам нравится Си++ - почему бы и нет? Может быть, у меня просто такие проекты, но ни разу не ощущал потребности перейти на Си++. А просто так без причины как-то не хочется.

Дело тут вовсе не том что нравится или нет, а в том, что этот инструмент обладает гораздо бОльшей функциональностью и значительно упрощает создание самодокументируемого и легкосопровождаемого кода.
Мне важнее последнее. Ведь в конечном итоге любой код превращается компилятором в т.н. машинные коды.
Поэтому если когда-то появится возможность писать на ARM под С#, я буду это делать, предварительно отключив "тяжелые" вещи, свойственные этим мощным языкам.

Я не буду ручной дрелью ковырять сотню дырок, особенно когда под рукой есть электрическая дрель wink.gif


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


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(Forger @ Jan 29 2016, 13:52) *
Поэтому если когда-то появится возможность писать на ARM под С#, я буду это делать, предварительно отключив "тяжелые" вещи, свойственные этим мощным языкам.


Шарп без тяжелых вещей будет хуже плюсов wink.gif банально потому, что в плюсах значительно больше инструментов времени компиляции. Те же шаблоны, лямбды (сахарок над шаблонами), итераторы в for, да хоть старые добрые макросы.

А вот в шарпе приоритет отдается динамике. Опять же очень многие вещи завязаны на GC.

Плюсы же дают возможность писать достаточно высокоуровнево, но там где надо - генерируемый код будет не медленее си

Хотя конечно процессоры развиваются и постепенно это будет волновать все меньшее количество людей sm.gif
Go to the top of the page
 
+Quote Post
Forger
сообщение Jan 29 2016, 11:19
Сообщение #11


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

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



Цитата(Непомнящий Евгений @ Jan 29 2016, 14:10) *
Хотя конечно процессоры развиваются и постепенно это будет волновать все меньшее количество людей sm.gif
Именно! Тут главное - не отставать от поезда, иначе быстро спишут в утиль


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


Гуру
******

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



Цитата(Forger @ Jan 29 2016, 14:19) *
Именно! Тут главное - не отставать от поезда, иначе быстро спишут в утиль

Всё-таки чистое программирование и ковыряние в железе - сильно отличающиеся области деятельности. ИМХО, Си - достаточно простой и обозримый язык, чтобы железячник мог им достойно овладеть и строить сложные системы. Си++ уже выползает за пределы этой зоны, такие железячники - уже редкий зверь (вроде Вас). Там, где железо и софт делает один человек, Си никуда не денется.
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
||- - 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
|- - juvf   Цитата(Forger @ Jan 29 2016, 15:30) В обя...   Jan 29 2016, 14:21
- - 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 Текстовая версия Сейчас: 20th July 2025 - 08:58
Рейтинг@Mail.ru


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