|
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, 10:52
|

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

|
Цитата(scifi @ Jan 29 2016, 13:46)  Это и старый добрый Си умеет. Это даже можно на асме сделать )) Тока переход в плюсы - это переход на новый уровень структурного, а не функционального программирования. Чистый С хоть и позволяет это делать, но с такими ацкими костылями, что боже упаси это недобровольный "секас" Цитата Вам нравится Си++ - почему бы и нет? Может быть, у меня просто такие проекты, но ни разу не ощущал потребности перейти на Си++. А просто так без причины как-то не хочется. Дело тут вовсе не том что нравится или нет, а в том, что этот инструмент обладает гораздо бОльшей функциональностью и значительно упрощает создание самодокументируемого и легкосопровождаемого кода. Мне важнее последнее. Ведь в конечном итоге любой код превращается компилятором в т.н. машинные коды. Поэтому если когда-то появится возможность писать на ARM под С#, я буду это делать, предварительно отключив "тяжелые" вещи, свойственные этим мощным языкам. Я не буду ручной дрелью ковырять сотню дырок, особенно когда под рукой есть электрическая дрель
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jan 29 2016, 11:10
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(Forger @ Jan 29 2016, 13:52)  Поэтому если когда-то появится возможность писать на ARM под С#, я буду это делать, предварительно отключив "тяжелые" вещи, свойственные этим мощным языкам. Шарп без тяжелых вещей будет хуже плюсов  банально потому, что в плюсах значительно больше инструментов времени компиляции. Те же шаблоны, лямбды (сахарок над шаблонами), итераторы в for, да хоть старые добрые макросы. А вот в шарпе приоритет отдается динамике. Опять же очень многие вещи завязаны на GC. Плюсы же дают возможность писать достаточно высокоуровнево, но там где надо - генерируемый код будет не медленее си Хотя конечно процессоры развиваются и постепенно это будет волновать все меньшее количество людей
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|