На каком языке пишут программы для микроконтроллеров

Очень важный выбор — с какого же языка начинать изучение. Языков не так что бы много, но варианты существуют. Си, си++, паскаль, C# и т.д. И от этого зависят перспективы — насколько полезным будет это знание.

Самый низкоуровневый язык программирования для контроллеров. Для каждого типа контроллеров он свой. Практически, это программирование на уровне инструкций ядра. Писать на нём лучше не надо, он для специфических задач.

Но! Хотя бы для какой-то одной платформы очень желательно с ним поиграться и посоздавать программки, пусть и простые. Это позволит гораздо полнее понять устройство контроллера, и в случае чего понять, когда без него не обойтись.

Выглядит как-то так:

; Сохранение контекста
; Аргументы: нет
; Результаты: PSP, R4-R11 восстановлены
ContextLoad PROC
EXPORT ContextLoad
PUSH

; Получить номер текущего слота
BL _GetCurrentProcess
; Получить указатель на запись в таблице процессов
BL _GetProcess

Программирование микроконтроллеров: с чего начать и что изучать

; Сохранить её в R1
MOV R1, R0

; Прочитать указатель стека в R0
LDR R0, [R1, #SP_OFFSET]

; Записать указатель стека процесса
MSR PSP, R0

; Передвинем указатель на список регистров
ADDS R1, #4

; Прочитать старшие регистры из таблицы
LDR R4, [R1, #0]
LDR R5, [R1,#4]
LDR R6, [R1, #8]
LDR R7, [R1, #12]
LDR R3, [R1, #16]
MOV R8, R3
LDR R3, [R1, #20]
MOV R9, R3
LDR R3, [R1, #24]
MOV R10, R3
LDR R3, [R1,#28]
MOV R11, R3

POP
ENDP

В общем-то, ничего сложного, разве что непривычно.

С

Самый классический и широкоупотребимый вариант. Практически для любого контроллера найдётся компилятор Си. Возможно, он будет платный, возможно, бесплатный, но он почти наверняка будет. Не стоит рассчитывать на современные стандарты языка, в лучшем случае там будет C99.

Хотя, для тех контроллеров, к которым код умеет компилировать GCC, со стандартами можно разгуляться, правда, потеряв при этом частично переносимость. Код же на классическом старом С, если он грамотно написан, будет хорошо переносим и прекрасно соберётся даже под другой платформой. Конечно, с частичной заменой платформозависимых частей.

Для Си существует кучи готовых библиотек под разные задачи, драйвера для разных устройств, алгоритмы и всякое такое. Вероятно, их придётся адаптировать, но переделывать по готовому иногда проще, чем писать совсем не зная что.

// Остановить таймер
void timer_Stop(TEventHandler Handler) if (TimerFrequency) int i;

for (i = 0; i < TIMER_HANDLERS; i++)

if (Handlers[i].Handler == Handler) Handlers[i].Run = false;
Handlers[i].Fired = false;
break ;
>

С++

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

Читайте также:
Не меняется значок программы

STM32 или AVR. Как изучать программирование микроконтроллеров.

Но опять же, если компилятор GCC, то можно чуть ли не 17 стандарт использовать со всеми лямбдами, умными указателями и прочим.

Но там где есть компилятор плюсовой, можно уверенно использовать классы, наследование. ООП во всей красе. В Ардуино, вроде бы, используются классические плюсы.

Удобно оборачивать разные элементы программы в классы, удобно повторно использовать код — в С++ это является естественным поведением, тогда как в Си для этого надо писать код соответствующим образом, закладывая в него эту возможность искусственно:

1. Пример функции включения светодиода на С с повторным использованием:

void led_On(uint32_t Index) // Таблица светодиодв где-то задана выше, индекс передаётся в функцию
if(Index < sizeof(Pins) / sizeof(Pins[0]) gp_Low( // Если номер допустимый — включаем.
>
>

led_On(0);
led_On(1);

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

2. Пример аналогичной функции включения светодиода на С++:

TLed::On() gp_Low(Pin);
>

Всё упростилось — проверки не нужны, аргументы с выбором тоже, ведь класс содержит уже всё, что надо. И использование:

TLed LedWork(PA, 1); // Создаём объект для управления светодиодом, отображающим статус «Работа», на ножке РА1
TLed LedError(PA, 2); // Создаём объект для управления светодиодом, отображающим статус «Ошибка», на ножке РА2

LedWork.On();
LedError .On();

Для плюсов библиотек тоже довольно много.

// Задать уровень на ножке (режим вывода)
void Pin::Set( bool Value) if (Value)
Ports[Port]->BSRR = (1UL else
Ports[Port]->BSRR = (1UL >

// Прочитать уровень на ножке (режим входа)
bool Pin::Get() return ((Ports[Port]->IDR

Прочие языки

Все остальные языки существуют эпизодически, часто в каких-то обрезках, не реализуя все возможности языка. Для одного контроллера паскаль найдётся, а для другого уже нет. И перенести наработки так просто не выйдет. Хотя, если этот язык хорошо известен и цель всего лишь понять логику и получить опыт, то почему бы и нет.

Библиотеки готовые найти сложно. Либо подбирать железо под готовые библиотеки, либо писать самостоятельно. То есть все вайфаи, блютусы, gps, датчики, и т.д. придётся подключать совсем своими силами.

Но раз эти языки есть и используются, значит, это кому-то нужно и полезно.

Выбор языка — личное дело каждого, и всё зависит от цели. Главное, понимать их ограничения и возможности.

Источник: dzen.ru

Микроконтроллеры Процессоры, проекты, программирование

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

Последние позволяют выполнять работу с отдельными линиями портов ввода/вывода или флагами регистров. Подобные команды отсутствуют в большинстве крупных архитектур. Даже ядро 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 можно рекомендовать любителям, не нацеленным на создание, в основном, простых устройств.

Читайте также:
Comtest программа как пользоваться

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

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

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

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

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

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

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

Заключение

Выбор того или иного языка программирования зависит от множества факторов. В первую очередь необходимо определиться с типом решаемых задач и необходимым качеством кода. Если не требуется разработка объемных и сложных программ, то можно использовать практически любой язык.

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

You have no rights to post comments

Источник: mcucpu.ru

Как программируются микроконтроллеры? На каком языке, и какие функции выполняют?

По большей части сейчас используется Си, хотя можно программировать и на Ассемблере. Среда программирования может быть различной, например, тот же, знакомый многим PC-программистам, Eclipse.

Существуют эмуляторы, благодаря которым можно ознакомиться с программированием МК, не имея железной части. Хотя предпочтительней, конечно, купить у производителя development board, где уже есть плата с вашим МК, подключена периферия (от светодиодов и кнопок, до индикаторов, usb-интерфейсов и т.д.), с которой МК работает на хардварном уровне , и можно, не беря в руки паяльник, на готовом рабочем железе и софтовых примерах сразу начать тренироваться кодить. В будущем, разумеется, когда будете делать собственные проекты, необходимо будет уже разрабатывать собственные платы.

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

Источник: yandex.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru