Программирование микроконтроллеров языки программирования

Языки программирования

Все современные микроконтроллеры относятся к классу микропроцессорных устройств. Главным принципом действия таких элементов является исполнение последовательного потока команд, называемого программой. Микроконтроллер получает команды в виде отдельных машинных кодов. Между тем, для создания и отладки программ, машинные коды подходят плохо, так как трудно воспринимаются человеком. Этот факт привел к появлению различных языков программирования.

Языки программирования микроконтроллеров по своей структуре мало отличаются от классических языков для компьютеров. Единственным отличием становится ориентированность на работу со встроенными периферийными устройствами. Архитектура микроконтроллеров требует, например, наличия битово-ориентированных команд. Последние позволяют выполнять работу с отдельными линиями портов ввода/вывода или флагами регистров. Подобные команды отсутствуют в большинстве крупных архитектур. Даже ядро ARM, активно применяемое в микроконтроллерах, не содержит битовых команд, вследствие чего разработчикам пришлось создавать специальные методы битового доступа.

Ассемблер

Ассемблер является языком самого низкого уровня. При этом он позволяет наиболее полно раскрыть все возможности микроконтроллеров и получить максимальное быстродействие и компактный код. В некоторых случаях альтернативы ассемблеру нет, но тем не менее он имеет множество недостатков. Несмотря на получаемую компактность машинного кода, программа, написанная на языке Ассемблер, громоздка и труднопонимаема. Для ее создания требуется отличное знание архитектуры и системы команд микроконтроллеров.
Ассемблер отлично подходит для программирования микроконтроллеров, имеющих ограниченные ресурсы, например 8-ми битных моделей с малым объемом памяти. Для больших программ и тем более 32-разрядных контроллеров, лучше использовать другие языки, отличающиеся более высоким уровнем. Это позволит создавать более сложные и при этом понятные программы.

С/С++

Язык программирования С/С++, относится к языкам более высокого уровня, по сравнению с Ассемблером. Программа на этом языке лучше понятна человеку. Достоинством С/С++ является огромное число программных средств и библиотек, позволяющих просто создавать необходимый код. Фактически, С/С++ сегодня стал основным языком разработки управляющих программ. Компиляторы данного языка реализованы практически для всех моделей микроконтроллеров. Стандартный язык дает возможность переноса программ с одной платформы на другую. Теоретически, используя разные компиляторы, можно преобразовать любую программу в команды микроконтроллера нужного типа. На практике дополнительно требуется учитывать архитектуру микроконтроллера каждого типа.
Язык С/С++ имеет достаточно сложную для изучения структуру. Получаемый программный код конкретной задачи, имеет больший объем, чем код той же задачи, реализованной на Ассемблере. Тем не менее язык С/С++ следует признать единственным правильным выбором для профессионального программирования микроконтроллеров.

// Пример программы на языке С 
// Мигание встроенным светодиодом Arduino
void setup() <
pinMode(13, OUTPUT); // Инициализация выхода 13
>

void loop() digitalWrite(13, HIGH); // Зажечь светодиод
delay(1000); // Задержка
digitalWrite(13, LOW); // Зажечь светодиод
delay(1000); // Задержка
>

Pascal

Язык Pascal еще более удобен для восприятия и изучения. Тем не менее, он не имеет такого распространения как C/C++, особенно при программировании микроконтроллеров. Некоторые отдельные фирмы поддерживают данный язык, с целью упрощения перехода на контроллеры с больших ПК. В частности вариант языка под названием MicroPASCAL входит в состав поставки отладочных средств фирмы Mikroelektronika.

// Пример программы на языке MicroPASCAL
// Мигание светодиодом
program LED_Blinking;

begin
PORTC := 0; // Инициализация PORTC
TRISC := 0; // Настройка PORTC

while TRUE do // Начало бесконечного цикла
begin
PORTC := not PORTC; // Инвертирование PORTC
Delay_ms(1000); // Задержка
end;
end.

BASIC

Старинный язык первоначального обучения программированию, в настоящее время в основном сохранился в виде реализации Visual BASIC от Microsoft. Используется он и для программирования микроконтроллеров. Реализаций этого языка гораздо больше, чем того же Pascal. Связано это в первую очередь с простотой языка. BASIC часто выбирают разработчики программно-аппаратных платформ, нацеленных на упрощенную разработку электронных устройств. Можно назвать такие проекты, как PICAXE, Amicus18, microBASIC и некоторые другие. Недостатком BASIC является плохая структурированность кода. Этот язык не стоит выбирать для первоначального изучения с целью дальнейшего перехода на С/С++. Программирование микроконтроллеров на BASIC можно рекомендовать любителям, не нацеленным на создание, в основном, простых устройств.

' Пример программы на ProtonBASIC
' Мигание светодиодом на PORTB.0 Amicus18.

While 1 = 1 ' Начало бесконечного цикла
High RB0 ' Включить PortB.0
DelayMS 500 ' Задержка полсекунды
Low RB0 ' Выключить PortB.0
DelayMS 500 ' Задержка полсекунды
Wend ' Закрытие цикла

Визуальные языки

Пример программы FlowCode

В отличие от классических языков программирования, визуальные языки позволяют разрабатывать программы в виде изображений. Среди таких языков можно выделить FlowCODE или Scratah. Достоинством визуальных языков является хорошо воспринимаемая структура алгоритма. Это позволяет просто разобраться в его функционировании любому человеку, знающему основные символы языка. Перевод структурных схем в команды микроконтроллера, как правило, выполняется не сразу. Вначале алгоритм транслируется в команды ассемблера или какого-либо языка высокого уровня. Только затем, все преобразуется в машинный код. Такая схема, несмотря на свою сложность, позволяет использовать наиболее удобные компиляторы разных разработчиков.

Читайте также:  Языки разработки мобильных приложений android

Еще одним достоинством визуального программирования становится простота изучения, поэтому подобные языки часто используются для обучения детей. Недостатком визуального подхода является громоздкость исходных материалов. Тем не менее, подобные языки программирования нашли очень большое распространение для решения специальных задач.

Заключение

Выбор того или иного языка программирования зависит от множества факторов. В первую очередь необходимо определиться с типом решаемых задач и необходимым качеством кода. Если не требуется разработка объемных и сложных программ, то можно использовать практически любой язык. Для обеспечения компактности кода подойдет Ассемблер, а если ставятся серьезные задачи, то альтернативы С/С++ практически нет. Также необходимо учитывать доступность компилятора. В некоторых случаях, реализация языка может вообще отсутствовать, или предлагаться за солидные деньги. В итоге самым универсальным решением можно назвать связку Ассемблера и C/C++.

You have no rights to post comments

Источник

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

Когда я только начинал вливаться в программирование, то в книге я прочитал про историю появления Java и про ее подход к работе программ. Узнал, что при помощи JVM язык добивается кроссплатформенности и за счет этого Java стала такой популярной. Т.е. в моем понимании язык тогда как раз таки и подходил для микроконтроллеров, но сейчас когда ищу информацию про программирование для микроконтроллеров, то встречаю, что в основном это сейчас делают на языке Си. Вопрос в следующем: какой же язык сейчас наиболее популярен для разработки ПО под микроконтроллеры и почему для этой цели (как я читал на других источниках) язык Си выбирают чаще чем свой более развитый аналог — Java?

Простой 1 комментарий

Конечно, подавляющее большинство микроконтроллеров программируется на C. (если отвлечься в сторону теории, то основой является требование выполнять конкретные инструкции CPU. Это достигается при помощи компилятора. Что есть компилятор: фронтенд(разбор человеческого текста во внутренний язык компилятора)->оптимизатор/и др.->кодогенератор. Из всего этого — можно заменить фронтенд — получим другой язык?, но не все так просто — особенности языка простираются в ограничения для оптимизатора.)
Из вышеупомянутого — понятно, что компиляторы, целью которых является код микроконтроллеров — преимущественно являются компиляторы для ‘человеческого’ C.
Для тех, кто достиг этой строки комментария — замечаю: существуют реализации ARM контроллеров, которые выполняют Java код на аппаратном уровне. Об этом — см. «семейство технологий Jazelle».
PS: Java не аналог C, он только имеет схожий синтаксис, для более лёгкого перехода специалистов от C к Java (так подразумевалось разработчиками Java).

У Java ME есть минимальные системные требования для целевых устройств.
Взглянув на них, становится понятно, что это не для микроконтроллеров в общем случае. Конечно, встраиваемая система встраиваемой системе рознь, но вот микроконтроллеры ещё используют не только для встраиваемых систем, а прямо в железо, например, радио-приемопередающего устройства, спроектированного на работу с протоколом физического уровня. Такие контроллеры могут иметь килобайты памяти всех видов. Зачастую, такие девайсы предлагают не так много ассемблерных инструкций, чтобы имело смысл делать под них компилятор Си. В более универсальных микроконтроллерах компилятор есть, поэтому это вполне себе повод для радости.

Там, где можно развернуть JME, уже есть Linux kernel, поэтому ответ на вопрос о том, почему больше используется Си, чем Java, заключается в том, чем занимается компания, в чем у нее бизнес и какой у нее рынок. Количественно, решений, которым нужно JME просто меньше, относительно тех, в которых не нужна прослойка в виде ОС.

fox_12

почему для этой цели (как я читал на других источниках) язык Си выбирают чаще чем свой более развитый аналог — Java

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

Удачи с размещением виртуальной машины Java + кода самой программы с учетом имеющихся ресурсов.

ты чё !! нашел чё смотреть !! минимум малинка минимум линуха со всем высокоуровневым обвесом !! чё ковыряться в какойто мелочевке.
🙂

sim-card-left_3_1.png

Справедливости ради:
https://ru.wikipedia.org/wiki/Java_Card
Из распространенного:

gbg

d-stream, Абсолютно некорректное сравнение. На борту SIM находится 32 битный процессор с аппаратным ускорением криптографии, 16 килобайт RAM и полмегабайта флеш и столько же ROM.[1] Туда как раз JAVA-машина (сильно порезанная) прекрасно влезет.

lazalu68

d-stream, а есть примеры кода для таких джава карт? Интересно посмотреть. В интернетах я вижу только какие-то обучалки простейшие

вполне корректное. Микроконтроллеры совсем не заканчиваются ATTiny13 и есть вполне «жирные» в плане ресурсов. Так что справедливости ради микроконтроллер на java вполне имеет право на существование. Что и иллюстрируют те же sim-карты.

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

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

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

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

Так что все зависит от здравого смысла и стоимости.
Просто так везде пихать java — немного глупо.

Источник

Оцените статью