LINUX.ORG.RU

На чем все таки надо писать Embedded?

 , , ,


2

4

Относительно недавно начал работать программистом для встройки (stm32f0-f1-f3). Раньше делал только домашние проекты на сишке, потому что все книги и гайды пишут на сишке и я подумал что это идет как стандарт для встройки. Когда шел на работу, думал: «Ух, сейчас на сях попишу». Оказалось, что там пишут на плюсах, стиль там скорее как «си с классами», но потихоньку двигаются в сторону плюсовых подходов (например, хотим концепты затащить). Вот хотел бы выслушать людей с многолетним опытом, какие-то аргументы за C или С++ в embedded, потому что все что услышал тут: «Ну, не надо передавать ссылку на self в функции для работы со структурами».

Ответ на: комментарий от hateyoufeel

Мне как раз больше одного не надо. И меньше одного тоже не надо. На эту вашу Ada ни компиляторов, ни программистов не найти, она устарела примерно как Паскаль. Используется в старых проектах, новое в здравом уме на Ada вряд ли пишут.

aiqu6Ait ★★★★
()
Последнее исправление: aiqu6Ait (всего исправлений: 1)

Если ты понимаешь, что пишешь, то код на плюсах может не уступать сишному коду ни в каких аспектах производительности.

При этом ты получаешь не мало плюшек крестов:

  • constexpr вычисления без лапши на макросах с нормальными ct-проверками. Те же пины считать вполне удобно.
  • Более строгая типизация. Enum class и т.д.
  • Полноценное ООП. Причём плюсовая реализация vtable будет лучше велосипеда на сишке и указателях на функции.
  • Шаблоны и упомянутые концепты. Единственное что, с шаблонами нужно в рамках адекватности оставаться, а то код во флешку не влезет.

Из минусов я заметил только неполноценные disagnated initializers. Ну и без consteval конструкторов может быть сложно проводить инициализацию удобно, а если структура хранится в специфичных секциях, то она должна инициализироваться в компайл-тайме. Но это вполне решаемо, без каких-то костылей.

Ну и лучше включить ms-extensions с анонимными union и struct полями.

В общем и целом, выбирать сишку вместо плюсов смысла вообще нет.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от Ivan_qrt

неполноценные disagnated initializers

Вот это то, чего мне конечно не хватает… Enum class да, удобно, а вот до constexpr, шаблонов и концептов мне еще просветляться

snake266 ★★
() автор топика

Та на чём угодно можно писать ембедед, особенно с современными ARM микроконтроллерами. Хоть си, хоть руст, хоть джава, хоть микропайтон. Есть даже извращения на джаваскрипте.

sbu_shpigun
()
Ответ на: комментарий от aiqu6Ait

Компиляторов есть прямо у тебя в GCC. Называется GNAT. Используй, радуйся.

Ada много где есть, но это в основном места, где требования к корректности выше и просто быдлокодеришками на сишечке всё не решить.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Ada много где есть, но это в основном места, где требования к корректности выше и просто быдлокодеришками на сишечке всё не решить.

Скоко илитности в одном приложении. Только есть нюанс - эти ваши требования к корректности можно решить и на С, и на Паскале, и на Ада. Ну как минимум в бортовом ПО авиации.

aiqu6Ait ★★★★
()
Ответ на: комментарий от aiqu6Ait

Можно, но почему-то не решают. Для C есть что-то плохожее на SPARK? То есть, гарантированно безопасное подмножество языка с компилятором, который это проверяет.

hateyoufeel ★★★★★
()
Ответ на: комментарий от slackwarrior

Пытались заменять коммерсанты от науки, физики плевались от результатов и продолжают юзать фортран

И что используют в церне? От тех кто на ЛОРе с наукой связанны тоже слышу что С++ используется вместо Fortran.

Питон всего лишь в хайп-трейне :) это регулярно происходило, происходит, и... проходит, «и это пройдет»

Пройдет, потому что придумают что то еще более крутое.

MOPKOBKA ★★★★
()
Ответ на: комментарий от hateyoufeel

Для C есть что-то плохожее на SPARK?

Не разбираюсь, но Frama-C вроде то? Пишешь контракты и оно проверяет.

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от bonta

Ты откуда такой вылез, опередив меня? ) Кстати, для всяких ардуионок даже сборки специальные существуют, но они проприетарные и хотят денег. Но удобство того стоит.

foror ★★★★★
()
Ответ на: комментарий от MOPKOBKA

И что используют в церне? От тех кто на ЛОРе с наукой связанны тоже слышу что С++ используется вместо Fortran.

На, послушай ядерного физика https://youtu.be/HvAipsXmJpk?t=528 :) Он как раз один из тех кто плевался от результатов «использования С++» и в курсе попыток в церне (и в курсе чем оно обернулось, тут же и рассказывает) и именно после переписахтунга нубами в предметной области (да и в С++ скорее всего тоже нубами, если они не смогли в эквивалентный код и гарантии надежности за 10(!) лет).

Алсо «используется в церне» — это не показатель. В церне может и вижуалбарсик используется... Для формирования отчетов в бухгалтерии :) Это повод говорить «используется в церне» только в целях маркетингового булшыта. С целью «понижения планки входа» — и как следствие, снижения стандартов в среднем по больнице :)

Пройдет, потому что придумают что то еще более крутое.

Более крутое все уже было. Называется доказательства надежности, т.е. формальная верификация. Пыхтон — это деградация, переписывание того что уже было на быдлоязычке, ради переписывания, который язычок сам по себе не имеет отношения ни к нейросетям, ни к науке, только к «науке»(ТМ).

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA

Ну да, там сильно все урезано (сам не трогал, в вики читал), но меня сильно удивило что для достаточно простейших задачь, с которыми сталкивается смарткарта и при ее крайне малопроизводительном аппаратном обеспечении индустрия выбрала путь javaCardVM вместо Си. Возможно это как то соотносится с банковской сферой (ну типа смарткарты) а в банковской сфере, как я знаю, исключая динозавро-софт на Кобол - весь современный софт это в 95% Джава. Ну типа потому что в банкинге производительность совершенно не приоритетна по сравнению с надежностью которую предоставляет Джава в модели разработки когжа программистам не дают особо думать а гонят вперед. Потому что если бы давали думать (имею ввиду что была бы такая модель разработки что сроки были бы наиболее менееприоритетной сущностью, и было время на вдумчивую, аккуратную, не спешную, внимательную разработку) то любой код на Си не имел бы никаких проблем с ошибками по памяти.

bonta ★★★★★
()
Последнее исправление: bonta (всего исправлений: 1)
Ответ на: комментарий от bonta

Потому что если бы давали думать (имею ввиду что была бы такая модель разработки что сроки были бы наиболее менееприоритетной сущностью, и было время на вдумчивую, аккуратную, не спешную, внимательную разработку) то любой код на Си не имел бы никаких проблем с ошибками по памяти.

Если бы давали думать, то сделали бы rust расширение где можно думать о чем то более важном, а все проверяется в компилтайм.

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

Ну вот опять про Раст. А меж тем, в критических к производительности местах код на Расте кишит Unsafe подмножеством. Так что смысла в нём не особо, зато дикий оверхед (от стороны разработчика) заключающийся в нужде работать на языке с вырвиглазным синтаксисом и отсутствующим ООП. ООП конечно не серебрянная пуля, но распространился до лидирующего подхода не за просто так.

bonta ★★★★★
()
Последнее исправление: bonta (всего исправлений: 1)
Ответ на: комментарий от bonta

Ну вот опять про Раст

Нет, просто лучше автоматизировать свою работу.

А меж тем, в критических к производительности местах код на Расте кишит Unsafe подмножеством

Где то да, где то нет.

Так что смысла в нём не особо

В остальных местах не будет никаких проблем, меньше «интересных моментов» из С++, если начинаются непонятные траблы то всегда известно куда нужно смотреть.

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

Еще логотип некрасивый?)

MOPKOBKA ★★★★
()

Zero-cost типобезопасные абстракции для работы с регистрами, к примеру. Особенно, когда в одном регистре напихано несколько бит с разными смыслами. Под регистрами: как memory-mapped, так и всякие SPI/I²C/etc.

У меня код для этого на C++ в виде далёкого от «C++ с классами» написан: https://www.epiphan.com/compare-usb-video-grabbers/

hatred ★★★
()
Ответ на: комментарий от slackwarrior

На, послушай ядерного физика https://youtu.be/HvAipsXmJpk?t=528

Посмотри на заголовок видео, это сходка шизов, это даже по манере речи ясно.

Алсо «используется в церне» — это не показатель.

Плюсы везде, это факт, церн как один из примеров.

MOPKOBKA ★★★★
()

Я бы еще предложил посмотреть на micropython. Особенно если он портирован на нужный чип. Недостающие части прошивки можно писать на C и оборачивать в питон модули. Asyncio в эмбеддед выглядит достойно

OxiD ★★★★
()
Ответ на: комментарий от Werenter

Хорошего только одно - стандартизация гребенок для всех этих плат втыкалок. Но и это сводится на нет, потому что все берут nano а не uno ибо дешевле.

AVR микроконтроллеры это просто дно донное, поэтому платформа на них основанная мне угодить не может никак.

Я согласен рассматривать еще ардуиносовместимые stm32 nucleo платы, вещь хорошая, но у них дикий ценник.

James_Holden ★★★
()