Ныряем глубже в С на эмбедах. Общие впечатления.

github.com/speedcontrols/ac_sc_grinder

Закончили первый проход структурирования прошивки для регуля бормашинки. Всплыли новые подробности. Если писать на плавучке, то производительности не хватает. Ну не то чтобы кто-то надеялся, но при грамотном подходе с низкоуровневых оптимизаций никто не начинает. IMHO в долгосрочной перспективе гораздо важнее сначала сделать правильную архитектуру. В принципе можно было бы плюнуть, и поставить более дорогой stm32, но захотелось вспомнить детство и разобраться (с фиксированной точкой и т.п.).

Я как-то рассчитывал, что с PlatformIO быстро подключу нужные библиотеки и все будет хорошо. Ага, щаз…

  • Библиотеки с фиксированной точкой имеют левые привязки к фреймворкам, и просто не собираются.
  • В библиотеках эмуляции EEPROM куча левых define-ов, которые не переопределить.

Короче, возвращаемся к стандартному сишному аду, когда в проект копируются внешние исходники и что-то в них правится. Чуда не случилось.

Вообще я как-то привык, что качеством кода можно (и нужно) управлять. Например, я отношусь прошивке на С как к временному явлению (пока не готов rust), и не хочу глубоко нырять в освоение фреймворков. То есть, в проекте очень серьезно структурируется бизнес-логика (data flow), а самый нижний уровень лепится на скорую руку. Эдакий осознанный профессиональный говнокодинг. И тут выясняется, что с библиотеками (на нижнем уровне) до сих пор ад. Грустно.

Я это к тому, что PlatformIO штука клевая, но всех проблем не решает. Можно было бы конечно сделать нормальные библиотеки, но в том-то и дело, что сильно заморачиваться с С не хочется. Дотянем “как сумеем”, а осенью перекатаем все на rust и станцуем на могилке С-шной прошивки.

Кстати, вот интересно, когда наличие FPU станет обязательным во всех микроконтроллерах. Мы уже пришли к тому, что 32-битный ARM с целочисленным умножением и делением - это нормально и совсем недорого. Еще бы плавучку, и можно было бы заниматься именно разработкой логики, не отвлекаясь на оптимизации.

Лет 20 назад я гордился тем, что умею оптимизировать код с учетом особенностей процессора. Со временем пришло понимание, что гордиться можно более интересными вещами 😃. Глупо тратить больше половины времени на то, чтобы держать в голове низкоуровневые оптимизации. Это когда проект один, можно с ним возиться до посинения всю жизнь. А когда их много, и надо везде успеть, то упарываться с низкоуровневыми оптимизациями не рационально. Тем более если за это никто не заплатит 😃.

  • 890
Comments
ADF

И тут выясняется, что с библиотеками (на нижнем уровне) до сих пор ад. Грустно.

ИМХО делается только хуже. Так быстро сейчас все течёт и так много людей участвуют в написании (говно)кода, что преобладать начинает код низкого качества.

когда наличие FPU станет обязательным во всех микро

Мир ждёт unum или posit 😃

Правда не совсем понял, как регулятору для бормашины может нехватать мощности. Сколько там пидов и какая частота? Для примеру, обычная атмега 2560 в составе мозга для коптера успевала по 300 раз в секунду матрицы перемножать и обрабатывать несколько пидов.

Vitaly

Говнокода всегда больше. Проблема в том, что хорошего вообще до сих пор не было, а не “надо поискать”. Например libfixmath почему-то никто не догадался под PlatformIO обернуть.

ADF;bt159578

Для примеру, обычная атмега 2560 в составе мозга для коптера успевала по 300 раз в секунду матрицы перемножать и обрабатывать несколько пидов.

Это так, но подобный код усрёшься писать и поддерживать. Что какбэ подтверждает BetaFlight, где в определенный момент выпилили процы без поддержки плавучки.

Насчет регулятора - лучше по ссылке исходники посмотреть, если есть вопросы.

lelik

Много я слышал обещаний танцев на могилах С-шного кода. И где все эти танцоры?

Vitaly

Пишут rust 😃. Трекать прогресс можно тут github.com/rust-lang-nursery/embedded-wg. Где-то к осени должны добить эмбеды.

lelik

Именно что пишут. Пока напишут, пока всех тараканов изведут, пока всяких библиотек наработают - появится еще что-нибудь модное, а руст, как и многое другое до него, забросят.

ADF

(Прошу простить за оффтоп)
На самом деле среди современных ЯП - есть много хороших, эффективных и очень грамотно спроектированных. Но это не гарантирует им популярность. На поверхность стихийно всплывает всякая фигня, типа JS и ПХП…
Как пример хорошего - советую пощупать haxe. К настоящему моменту уже взрослый, оброс библиотеками и пригоден для боевого применения.

Vitaly
lelik;bt159610

Именно что пишут. Пока напишут, пока всех тараканов изведут, пока всяких библиотек наработают - появится еще что-нибудь модное, а руст, как и многое другое до него, забросят.

Да нормально там все, и биндинги сишные оно понимает. Речь конкретно про эмбеды, которые надо заставить работать без sdt. С этим пока есть нюансы.

Vitaly
ADF;bt159621

(Прошу простить за оффтоп)

Давай ты просто перестанешь постить мне в комменты болтовню на общие темы.