На каком языке сейчас чаще всего программируют микроконтроллеры?

Когда я только начинал вливаться в программирование, то в книге я прочитал про историю появления Java и про ее подход к работе программ. Узнал, что при помощи JVM язык добивается кроссплатформенности и за счет этого Java стала такой популярной. Т.е. в моем понимании язык тогда как раз таки и подходил для микроконтроллеров, но сейчас когда ищу информацию про программирование для микроконтроллеров, то встречаю, что в основном это сейчас делают на языке Си. Вопрос в следующем: какой же язык сейчас наиболее популярен для разработки ПО под микроконтроллеры и почему для этой цели (как я читал на других источниках) язык Си выбирают чаще чем свой более развитый аналог - Java?
  • Вопрос задан
  • 18441 просмотр
Решения вопроса 1
@majstar_Zubr
C++, C#, gamedev
У Java ME есть минимальные системные требования для целевых устройств.
Взглянув на них, становится понятно, что это не для микроконтроллеров в общем случае. Конечно, встраиваемая система встраиваемой системе рознь, но вот микроконтроллеры ещё используют не только для встраиваемых систем, а прямо в железо, например, радио-приемопередающего устройства, спроектированного на работу с протоколом физического уровня. Такие контроллеры могут иметь килобайты памяти всех видов. Зачастую, такие девайсы предлагают не так много ассемблерных инструкций, чтобы имело смысл делать под них компилятор Си. В более универсальных микроконтроллерах компилятор есть, поэтому это вполне себе повод для радости.

Там, где можно развернуть JME, уже есть Linux kernel, поэтому ответ на вопрос о том, почему больше используется Си, чем Java, заключается в том, чем занимается компания, в чем у нее бизнес и какой у нее рынок. Количественно, решений, которым нужно JME просто меньше, относительно тех, в которых не нужна прослойка в виде ОС.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 9
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
почему для этой цели (как я читал на других источниках) язык Си выбирают чаще чем свой более развитый аналог - Java

Пример контроллера - ATTiny13:
- 1 КБ внутрисистемно программируемой Flash памяти программы
- 64 байта внутрисистемно программируемой EEPROM памяти данных,
- 64 байта встроенной SRAM памяти

Удачи с размещением виртуальной машины Java + кода самой программы с учетом имеющихся ресурсов...
Ответ написан
@0x131315
Тут чистая экономика.
Контроллеры ставят в основном в массовые устройства.
Это значит что каждый сэкономленный доллар - это десятки, а то и сотни миллионов прибыли на ровном месте.
Подобные суммы с лихвой покрывают время программистов, поэтому им ставят задачу уложить функционал на самый дешёвый контроллер, который ещё хоть как-то способен потянуть этот функционал.
Отсюда - высокая степень оптимизации кода при работе с контроллерами.
Нужно максимально использовать все особенности конкретного контроллера - программисты много работают с даташитом.
Язык должен позволить максимально полно использовать систему команд конкретного контроллера, и гибко управлять регистрами и памятью контроллера.
Поэтому в ходу в основном ассемблер - с ним можно писать максимально компактный код.
Но функционал зачастую достаточно большой, чтобы его целиком писать на ассемблере.
Поэтому, в целях экономии времени, пишут на Си, с использованием библиотек, а самые ответственные места реализуют с помощью ассемблерных вставок.
Благодаря этому удается реализовать почти все преимущества и ассемблера и Си: быстрая и достаточно полно контролируемая разработка, с достаточно компактным и быстрым кодом.

С симками ситуация иная - там важно было реализовать кроссплатформенный код. Поэтому используют java, не смотря на ресурсы.

В более мощных контроллерах в ходу уже не конкретный язык, а целые ОС. В основном в прошивках просто зашивают Линукс, а отдельные части по управлению контроллером реализуют на Си как драйвера.

Там, где важна производительность, вообще не пользуются программным кодом, а переходят на железную логику - плисы. Это в основном оборудование для обработки сигналов, в т.ч. всевозможные радиомодули, модемы, видеооборудование, и т.п.

Так что все зависит от здравого смысла и стоимости.
Просто так везде пихать java - немного глупо.
Ответ написан
Комментировать
fdv
@fdv
Я в шоке от масштабов трагедии... Java? В микроконтроллеры?! Да там и Си не всегда подходит, нужен Ассемблер. Потому, что Си генерирует более громоздкий бинарный код.
Java... Тихий шок.
Ответ написан
Комментировать
@evgeniy_lm
знал, что при помощи JVM язык добивается кроссплатформенности и за счет этого Java стала такой популярной. Т.е. в моем понимании язык тогда как раз таки и подходил для микроконтроллеров

Не знаю с какого потолка вы взяли подобное понимание, но именно из-за JVM JAVA совершенно неприемлем для микроконтроллеров. За кроссплатформенность JAVA приходится расплачиваться большим расходом памяти и низким быстродействием.

PS Некоторые контроллеры Амперки которые на ARM Cortex программируются на JavaScript, но это уже другая история (помоему не очень удачная)
Ответ написан
Комментировать
@regsmic
Можно и на яве писать, только под это дело компилятор нужен, чтобы код перевести в машинные коды, понятные процессору.
Не важно на каком языке писать код, он все равно будет преобразован компилятором. Так уж сложилось исторически, что был выбран Си.
Ответ написан
Комментировать
angrySCV
@angrySCV
machine learning, programming, startuping
языки ну C, Rust тк обычно от контроллеров требуется не просто данные обрабатывать, а обрабатывать именно в реальном времени, тоесть выполнять конкретные действия, точно в назначенное время, а джава машина не работает в реальном времени.
Ответ написан
Комментировать
@Garifullin_Ilmar
Java хороша там где нужны большие объемы данных, масштабируемость , потокобезопастность , при этом плевать на требования к железу , всегда можно поставить сервак помощнее
На микроконтроллерах в силу специфики нужны минимальный размер скомпилированного кода , более оптимальный код , минимальное потребление электроэнергии.
Потому си или даже ассемблер в особых случаях
Ответ написан
Комментировать
Terranz
@Terranz
Я просто оставлю это здесь, для всех кто этого не видел раньше и не в курсе java процессоров
Ответ написан
Комментировать
bullitufa
@bullitufa
электронщик программист (микроконтроллеры и PC)
Всё зависит от задачи!
С, С++, Rust, asm. Примерно такое распределение использования я вижу.
Я С++ использую скорее как "С с классами". Замечу что С++ не намного жрёт ресурсы по сравнению с С. Нужно "уметь готовить" (-fno-exceptions, -fno-rtti, виртуальные функциию, наследования и т.д.).
С++ позволил написать драйверы на периферию (таймеры, spi, i2c, uart). И при переходе с платформы на платформу минимизировать изменения, а то и избежать их. Естественно не обошлось без использования STL (в основном контейнеры), но не использовать методы с exception.
Но вся низкоуровненвая часть на Сях.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы