Комментарии 61
В кокосе в свое время можно было выбрать контроллер и создать проект прям в несколько кликов. Если не путаю.
А сейчас все что может само генерировать проект выдает чудовищные простыни с HAL через которые новичку пробраться к железу гораздо сложнее. Хотя сейчас есть LL но с ним по-умолчанию тоже проект не сгенерируешь, опять hal прицепом.
Кстати, можете мне на пальцах объяснить, почему куб выдаёт стену кода? Возможностей и шаблонов, и даже макросов вполне хватает на то, чтобы пользовательский код был достаточно краток.
Кстати, можете мне на пальцах объяснить, почему куб выдаёт стену кода?Да никакой особой стены кода куб не выдаёт. Просто по сути каждый конфигурационный бит процессора в нём записывается как человеко-читаемая строка, например
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
и чтобы понять, что тут происходит, нет необходимости каждую минуту лезть в даташит, выискивая вырвиглазные названия битов в таких же вырвиглазных названиях регистров.
Меня похожий вопрос интересовал, когда я решил попробовать ангуляр — ng init генерит не меньше кода, чем куб
Для быстрого перехода на стм32 идеально подходит stm32duino. По мере погружения код будет постепенно превращаться в нативный
Ну тинька и таблетка все же разных весовых категорий, а если сравнивать 328 и стм407 — вообще несравнимы. На тиньке что-то нормальное втиснуть — желателен ассемблер, а не ардуиноиде, на стмках же есть вполне нормальный STMCubeIDE, который содержит в себе все, что надо для разработки. Таки да, достаточно прост, чтобы разобраться, неплохой дебаггер и кейл не нужен при этом. Единственное, что плохо — он на эклипсе, посему любит задумываться даже на неслабых машинках и очень не любит стлинки на клонах китайских, aka cks или как там их.
В общем холивар atmel vs stm — изначально глуп, как хищник против человека-паука. Ну вы меня поняли...))
Фигня жто mbed. Редактор на сайте годится только для запуска примеров. Да и то не всех. Навигации нет, отладки нет, даже нормальных сообщений об ошибках нет. Десктопный редактор еще более убог.
Правда отладчик платный, но говорят он того стоит. А также можно глянуть на Segger Embedded Studio, есть мнение, что там дебаггер просто божественен
Недавно попробовал, вообще огонь.
Ну и на ту же таблетку можно писать, используя HAL, можно CMSIS, если очень хочется, то можно и SPL подключить. И да не будет холивар, что хал — дерьмо, настоящие пацаны пишут на регистрах )))
Я с вами согласен в целом, но все же на следующий Новый год я попрошу Деда мороза повесить каждому менеджеру ST волшебный ошейник. Что бы когда очередной noname_user будет плакать над примерами ST или документацией по волшебном ошейник пробегало вольт 300...
P. S. Самое обидное, что-бы вычистить код примеров нужны копейки, а человеко/лет user тратится порядочно.
int i;
volatile int i;
Volatile нужен для глобальных переменных, изменяемых в обработчиках прерываний.
Ничто не помешает компилятору выкинуть пустой цикл, как бесполезный при включении оптимизации.
Локальные переменные
Часто для создания небольших задержек пользуются такими функциями:
void Delay (char D)
{
char i;
for (i = 0; i < D; i++) continue;
}
Однако, некоторые компиляторы видят в этих функциях бесполезный код и вообще не включают его в результирующий объектный код. Если эта задержка применялась для снижения скорости программного i2c (или SPI) под компилятором, например, HT-PICC, то при переносе на ядро AVR с компилятором WinAVR программа перестанет работать, вернее, она будет работать так быстро, что управляемая микросхема не будет успевать обрабатывать сигналы из-за того, что все вызовы функции Delay будут упразднены.
Чтобы этого не происходило, нужно использовать квалификатор volatile:
void Delay (char D)
{
volatile char i;
for (i = 0; i < D; i++) continue;
}
Боюсь представить, что с вами будет, если я подключу std::for_each. :)
Так, а что вам не нравиться в цикле for? Любой ваш оператор цикла это по сути if и goto обернутые в красивое название (синтаксический сахар).
Лично я ничего не имею против, равно как и за. Это сродни предыдущему заявлению, что я был обязан указать volatile, человек считает, что я обязан, и его ничего не волнует.
Мне кажется вы слишком резко восприняли критику, volatile, мне кажется, в данном случае нужен, так как эта статья позиционируется как учебный материал и было бы полезно сразу знать о граблях. Я не увидел в словах того заявления принуждения к этому, только совет с объяснением почему.
Я использую в кейле 6.13 компилятор с настройкой оптимизации balance и подобные циклы порой исчезают.
Это сродни предыдущему заявлению, что я был обязан указать volatile, человек считает, что я обязан, и его ничего не волнует.
Меня волнует, что ряды «Не включайте оптимизацию! В компиляторе ошибка — цикл теряется.» пополнятся очередным адептом. И виноваты в этом будете вы со своей статьёй. А вот это уже скверно.
Строго говоря, да, Вы правы в случае с включенной оптимизацией. Делать задержку таким способом не самая лучшая идея, и оптимизацию надо будет отключить.
Здесь есть много того, за что можно развести критику до небес, но вы разглядели только volatile
Потому что именно volatile приводит к тому, что люди жалуются, что их код не работает при включении оптимизации и переносе на другой компилятор. И ругают «тупой» компилятор. Я это видел не раз и не два. И потому будет лучше, чтобы те, кто прочитает вашу статью не делали таких весьма необычных ошибок.
Но к вам вопрос: я что-то сказал неверно про использование в этом фрагменте volatile?
По поводу дебага на AVR — зачем? ну есть JTAG-отладчики, но кому это надо? в голове или симуляторе не дебажится? Сколько всего делал на AVR, поэтому недоумеваю.
Наилегчайший старт в STM через «одно место»