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

|
Цитата(sigmaN @ Jan 27 2016, 02:21)  это действительно обоснованный практикой совет или просто по-пугать? Честно интересуюсь, без стёба. Да нет особого стёба. Я написал свой printf. Точнее просто сделал п/п вывода чисел различных. В том числе с плавучкой. Вы же должны понимать как стандартный работает. Там через список передаются параметры и шаблон вывода. Получается, что при обработке тратится значительное количество памяти на стеке. Но проблема, если честно, не в самом объёме а в том, что это достаточно сильно меняющееся число. Ну и когда у вас несколько задач используют printf, то при анализе размеров стека понимаешь, что его надо увеличивать. В зависимости от сложности выводимой информации, народ указывает размеры до 2к. Вот и получается, что использование printf в трёх задачах - 6к озу. Применение своих п/п вывода экономит эту память. В моём случае скорости особой не требовалось, так как это происходило при выводе на дисплей, принтер, ну и в HTTP задаче. Никто не призывает отказываться от стандартных п/п. Просто надо знать инструмент, который применяешь. В случае с printf, надо автоматически увеличивать объём стека ну и убедится что вы выделили его достаточно. В частности FreeRTOS это позволяет делать.
|
|
|
|
|
Jan 29 2016, 04:59
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

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

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

|
Цитата(jcxz @ Jan 29 2016, 07:59)  В многозадачной среде можно сделать переключение стека при вызове printf, естественно заблокировав его семафором. Тогда не нужно закладывать дополнительный объём стека для printf для каждой задачи. Такие штуки лучше выносить в отдельный классы, методы, функции, делая защиту однозадачных вещей внутри в одном месте. Я использую отдельные классы-синглтоны, которые как бы везде видны, но существовать могут тока в одном экземпляре. В этом случае код не зависит от способа вывода служебной информации - где послед. порт, где сам экран, где эзернет и т.д. Позволяет дать имена более осмысленные и соответствущие требованиям конторы, чем некий prinf и им подобные наборы букв )) Тогда код легко читаем и переносим. Копированием кусков с одного проекта в другой не требует их допиливания. Не нужно писать бессмысленные комменты, которые тока путают. У меня в коде комментов практически нет - код написан так, что легко вкурить что он делает даже через много месяцев... Сорри за офф ))
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jan 29 2016, 10:30
|

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

|
Цитата(juvf @ Jan 29 2016, 12:48)  Оверинженеринг в вакууме. Когда ушел в C++ на ARMах, в голый С не вернусь даже под дулом пистолета ))) Разница по размеру кода щас никого не волнует, да и нету там особой разныцы, зато читаемость и переносимость на порядки выше! Скорость работы тоже не страдает. Я не использую исключения и работу с ними (пока что). В обязательном порядке стоит ось, причем сделана обертка вокруг нее, чтобы она стала C++, ну, там классы потоков, программных таймеров, семафором и т.п. Поменяю ось, поменяю обертку под нее, а весь остальной код во всех проектах вообще не изменится. Так читаемость и переносимость кода возрастает в разы. Нет глубокой привязки ни к ядру, ни к процу, ни к компилятору, ни к оси. Экономия времени на новых проектах просто чумовая! Лень-матушка вынуждает так поступать - категорически ненавижу переделывать свою же работу, лучше сразу сделать нормально
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jan 29 2016, 14:21
|

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

|
Цитата(Forger @ Jan 29 2016, 15:30)  В обязательном порядке стоит ось, причем сделана обертка вокруг нее, чтобы она стала C++, ну, там классы потоков, программных таймеров, семафором и т.п. Ну я же говорю - Оверинженеринг. У меня все проекты на С++. Ос - FreeRTOS на си. ни каких обёрток. Там где надо ООП - я использую ООП... делаю классы, инкапсуляцию, наследование, полиморфизм, динамика.... А где надо printf, да ещё он нужен только в одном месте, а именно в обработчике HF - зачем эти синглтоны и обёртки? Цитата Короче, вот простое сравнение: Детишки носятся на велосипедах, подрастают и пересаживаются на мопеды/моциклеты, потом личное авто, а у более успешных личный самолет Если вам надо отъехать от дома на 10-20 км вы наверно на самолёте полетите.... а я на авто поеду... или даже на мопеде.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|