Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Содержание

Программирование микроконтроллеров

Программирование микроконтроллеров

Что такое микроконтроллер?

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

Микроконтроллер, по сути, это полноценный компьютер, расположенный на небольшой цифровой микросхеме. На одном кристалле, как правило, располагаются такие устройства, как процессор, оперативная и долговременная память, устройства ввода-вывода, периферийные устройства и стандартные интерфейсы.

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

Программирование микроконтроллеров. Компоненты

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

Программирование микроконтроллеров обозначает запись, необходимых для выполнения команд, в постоянную память микроконтроллера (ПЗУ). Этот процесс не может осуществляться без таких компонентов, как: программатор (используется для записи программы в микроконтроллер), язык программирования и сама программа (должны быть понятны для микроконтроллера) и знание структуры и параметров микроконтроллера для его рационального использования.

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

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

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

Как правило, программирование микроконтроллера не подразумевает под собой написание именно исходного кода самой программы для получения нужного результата. Это сложный процесс проектирования заданного продукта. Процесс программирования микроконтроллеров происходит в несколько этапов:

Первый этап. Определение задач, которые должно выполнять микроконтроллер.

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

Второй этап.  Создание или выбор структурной схемы устройства на основе заданного микроконтроллера.

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

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

Третий этап. Создание программы для прошивки, на основе выбранного языка программирования.

Языки программирования микроконтроллеров по своей структуре очень похожи на языки программирования для универсальных компьютеров. Микроконтроллер, аналогично компьютеру, получает на вход машинный (двоичный) код. Такой код слабо воспринимается человеком и вследствие этого плохо подходит для отладки программ. Сложившаяся ситуация послужила появлению специализированных языков программирования для микроконтроллеров.

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

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

Языки программирования микроконтроллеров делятся на две группы:

  • низкого уровня
  • высокого уровня

Языком низкого уровня является Ассемблер. Здесь каждому оператору соответствуют не более одной машинной команды. Такой язык программирования очень громоздкий и нелегко понимается для человека. Тем не менее, альтернативы ему на данный момент практически нет, например, когда в процессе программирования микроконтроллера имеются ограниченные ресурсы, такие как 8-ми битные модели с ограниченным объемом памяти. Также данный язык обеспечивает достаточно большое быстродействие и компактность программного кода, что зачастую является немаловажным фактором.

К языкам высокого уровня можно отнести такие языки программирования микроконтроллеров, как PL/M, C/C++, Java, Pascal, Basic и другие. При работе с такими языками происходит увеличение производительности за счет замены одного оператора несколькими машинными командами. Языки программирования высокого уровня требуют больших затрат памяти, так как объем такой программы достаточно большой. Преимущество их использования, это возможность работы программы на различных микропроцессорах, при использовании программ-трансляторов.

В настоящее время в программировании микроконтроллеров наиболее часто используются языки Ассемблер и C/C++, так как обеспечивают компактность кода и быстродействие соответственно.

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

Наиболее популярными средами программирования микроконтроллеров являются: FlowCode(практически единственная среда, позволяющая программировать сразу несколько видов микроконтроллеров PIC, AVR, ARM),AlgorithmBuilder (графическая среда программирования AVR микроконтроллеров),CodeVisionAVR, IAR Systems, CodeComposerStudio (CCS), Energia, Virtualbreadboard, FlashMagic, MPLAB, WinAVR, AtmelStudio.

Устройство и программирование микроконтроллеров AVR. Микроконтроллер и как его победить.

Доброго дня уважаемые радиолюбители!
Приветствую вас на сайте “Радиолюбитель“

Что такое микроконтроллер, и для чего он нужен. Давайте обратимся к его определению:

Микроконтроллер – микросхема, предназначенная для управления электронными устройствами, или по другому – простенький компьютер (микро-ЭВМ), способный выполнять несложные задачи.

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

Наибольшей популярностью у радиолюбителей пользуются два вида микроконтроллеров:
PIC  – фирмы Microchip Technology
AVR – фирмы Atmel

Сразу хочу сделать небольшое отступление и пояснить одну свою позицию. Я не собираюсь ни сейчас, ни потом, рассуждать о достоинствах того или иного вида микроконтроллеров, того или иного программного обеспечения, и вообще всего, что связано с микроконтроллерами, что-то советовать, но а тем более – навязывать читателям. Все это дело вкуса, личных предпочтений и поставленных конечных целей в изучении микроконтроллеров. Ну а так как “необъятное – не объять”, все свое дальнейшее повествование я буду вести применительно к микроконтроллерам AVR и, не очень распространенной, но мной любимой, программы “Algorithm Builder”.

У разных типов микроконтроллеров, программ, есть, конечно, различия, но многое у них и общее. А познавать мир микроконтроллеров мы будем так, чтобы потом, полученные знания можно было бы без проблем применить и к PICам, и к любому программному обеспечению. И еще раз напомню, данная серия статей – моя попытка помочь тем, кто впервые услышал о существовании микроконтроллеров и желает постичь работу с ними.

Что нужно для того, чтобы научиться работать с микроконтроллерами? Я бы выделил несколько, на мой взгляд, главных условий:
1. Желание и настойчивость.
Тут все очень просто: есть желание – все получится. А желание с настойчивостью – вообще, вещь суперская.
2. Знание устройства микроконтроллера.
Здесь не важны глубокие знания (да может и вообще не нужны), но знать, что имеется “на борту” микроконтроллера необходимо. Только зная из чего состоит микроконтроллер, какие устройства в нем есть, их возможности, как они работают – только тогда мы сможем использовать возможности микроконтроллера на полную катушку.


3. Знание языка программирования и команд управления микроконтроллером.
Как будет работать микроконтроллер, какие задачи вы на него возлагаете и как он будет их выполнять, определяется заложенной в него программой – программой которую для микроконтроллера составляете вы сами. И на этом пункте мы остановимся несколько подробней, чтобы рассмотреть вопросы, которые могут появиться в будущем.

Программа (в переводе это слово означает – “предписание”) – предварительное описание предстоящих событий или действий.

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

♦ Зажечь светодиод:
– настроить вывод к которому подключен светодиод для работы на вывод информации
– подать на этот вывод логический уровень, который позволит зажечь светодиод
♦ Подождать некоторое время:
– перейти к подпрограмме формирующей паузу (которую тоже нужно “разжевать”)
– по выполнению подпрограммы паузы вернуться в основную программу
♦ Погасить светодиод:
– подать на вывод логический уровень, гасящий светодиод
и так далее.
С термином Программа неразрывно связан другой термин – Алгоритм  (как Волк и Заяц, Том и Джерри).

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

Если в программе мы подробнейшим образом прописываем действия микроконтроллера, то в алгоритме мы определяем порядок действий микроконтроллера, на основе которых мы потом создадим программу. По аналогии с вышеприведенном примером:
♦ Зажечь светодиод
♦ Подождать некоторое время
♦ Погасить светодиод
и так далее.
Таким образом, алгоритм – это предшественник программы. И чем тщательно и продумано будет создан алгоритм, тем проще будет создавать программу.

Итого, программа для микроконтроллера – это последовательность действий микроконтроллера в виде набора команд и инструкций, которые он должен выполнить для достижения поставленных нами целей.

Команды для микроконтроллера имеют вид набора единичек и нулей:
00110101 011000100
так называемые – коды команд, а коды команд – это язык который понимает микроконтроллер.  А для того, чтобы перевести наш алгоритм с русского языка на язык микроконтроллера – в эти самые наборы нулей и единичек, существуют специальные программы.
Эти программы позволяют описать порядок работы для микроконтроллера на более-менее понятном для нас языке, а затем перевести этот порядок на язык понятный микроконтроллеру, в результате чего получается так называемый машинный код – последовательность команд и инструкций (те самые нули и единички) которые только и понимает микроконтроллер. Текст программы, написанный программистом, называется исходным кодом. Перевод программы с языка программирования (исходного кода) на язык микроконтроллера (машинный код) производится  трансляторами. Транслятор превращает текст программы в машинные коды, которые потом записываются в память микроконтроллера.
В таких программах порядок работы микроконтроллера описывается специальным языком – языком программирования. Язык программирования отличается от нашего, человеческого языка. Если наш язык общения служит в основном для того, чтобы обмениваться информацией, то:

Язык программирования – это способ передачи команд, инструкций, чёткого руководства к действию для микроконтроллера.

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

01000110
10010011
01010010

Вряд-ли кто сможет разобраться в таком наборе комбинаций из двух цифр, а труд первых программистов был очень трудоемкий. Для облегчения своей жизни, программисты и стали создавать первые языки программирования. Так вот, чем ближе язык программирования к такому набору нулей и единиц тем больше он “низкого уровня”, а чем дальше от них – тем больше “высокого уровня”.
Самые распространенные языки программирования для микроконтроллеров:
– язык низкого уровня – Ассемблер
– язык высокого уровня – С (Си)
Давайте посмотрим на примере их различия (эти примеры абстрактные).
Допустим нам надо сложить два числа: 25 и 35.
В машинных кодах эта команда может выглядеть так:
00000101 1101001
На языке низкого уровня:
ADD Rd, Rr
На языке высокого уровня:
25+35
Различие языков низкого и высокого уровня видны невооруженным глазом, комментарии, как говорится, излишни.
Но давайте копнемся в этих примерах поглубже. Пример машинного кода разбирать не будем, так как он идентичен примеру на Ассемблере. По своей сути, Ассемблерные команды это те же машинные коды (команды) которым просто, чтобы не заблудиться в нулях и единицах, присвоены буквенные аббревиатуры. Ассемблерной командой ADD Rd, Rr мы ставим микроконтроллеру задачу сложить два числа, которые находятся (а для этого мы должны их туда предварительно записать) – первое в Rd, второе в Rr, а результат сложения поместить в Rd. Как видите мы ставим очень конкретную задачу микроконтроллеру: где взять, что с этим сделать и куда поместить результат. В этом случае мы работаем напрямую с микроконтроллером.
Команда на языке высокого уровня: 25+35, привычная для нас математическая запись, радующая наш глаз. Но в этом случае мы не работаем напрямую с микроконтроллером, мы просто ставим ему задачу сложить два числа. Результат и последовательность действий в данном случае будет тот-же, что и при выполнении ассемблерной команды: сначала эти два числа будут куда-то записаны, затем сложены а результат куда-то помещен.
И вот тут кроется главное отличие языков высокого уровня и низкого уровня. Если в Ассемблере мы контролируем весь процесс (хотим мы того, или нет): мы знаем где записаны эти два числа, и мы знаем где будет находиться результат, то в языке высокого уровня мы процесс не контролируем. Программа сама решает куда предварительно записать числа и куда поместить результат. В большинстве случаев нам это и не надо знать, ведь для нас главное итог – число 60 на выходе. Как результат, программы на языках высокого уровня более читаемы, приятны для глаза и меньше по размеру – ведь нам не приходится “лезть во все дыры” и расписывать каждый шаг микроконтроллера, программа это делает потом за нас, когда компилирует ее – переводит в машинные коды. Но тут есть и минус. Два одинаковых алгоритма написанных на Ассемблере и на Си, после преобразования их в машинные коды будут иметь разный размер: программа написанная на Ассемблере будет на 20-40% короче программы написанной на Си – черт его знает, каким путем идет Си для достижения нужного нам результата. И бывают случаи, когда нет доверия к языку высокого уровня и в программе на Си делают вставки кода, написанные на Ассемблере.
Профессиональные программисты, как правило, знают несколько языков программирования (или работают в команде, в которой есть специалисты по разным языкам), творчески соединяя их возможности и преимущества в одной программе. Ну а нам, любителям, надо знать хотя бы один язык (для начала), и начинать надо (а я в этом твердо уверен, и никто меня не переубедит) с языка низкого уровня – Ассемблера.

Ну что, я думаю и тут нам все понятно, – язык программирования изучать надо, по-другому – никак.

Команды и инструкции для управления микроконтроллером.
У микроконтроллеров AVR более 130 различных команд, которые позволяют ему реализовать все заложенные в нем возможности. Но сразу скажу – мало кто из любителей знает их все и тем более пользуется всеми. Обычно, в любительской практике хватает знания и половины команд, а то и меньше. Но изучать команды надо. Чем больше команд вы будете знать, тем изощреннее (в хорошем смысле слова) и элегантнее программы будут получаться.

Итого, будем считать, что желание у нас есть, настойчивость проявим, язык изучим, команды освоим, и, как итог, – одержим победу!

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


Следующие статьи:
♦ Микроконтроллер и системы счисления
♦ Микроконтроллер и логические операции
♦ Общее устройство микроконтроллера
♦ Арифметико-логическое устройство и организация памяти – память программ, память данных, энергонезависимая память
♦ Регистры общего назначения, регистры ввода/вывода, стек, счетчик команд
♦ Регистр состояния SREG
♦ Порты ввода/вывода микроконтроллера



Прграммирование микроконтроллеров.

Базовый уровень. | Festo Курс позволит научиться работать с современными микроконтроллерами, работать в различных IDE-средах, использовать симуляцию, создавать собственные программы.

Целевая аудитория: обслуживающий персонал КИПиА, операторы, инженеры, преподаватели и тренеры.

Основные темы курса:

  • Что такое микроконтроллеры. Разновидности. Основные сферы применения.
  • Языки программирования микроконтроллеров.
  • IDE среда – основные понятия.
  • Разновидности сред разработки управляющих программ для микроконтроллеров.
  • Краткое знакомство с IDE средами разных производителей.
  • IDE среда CodeVisionAVR – первое знакомство.
  • Интерфейс CVAVR, меню, окна.
  • NewProjectWizard – создание нового проекта.
  • Конфигурирование проекта, выбор микроконтроллера.
  • Параметрирование функций и свойств микроконтроллера.
  • Программаторы микроконтроллеров AVR. Интерфейсы программирования.
  • Внутрисхемное программирование. Интерфейс ISP.
  • Основы электротехники.
  • ПО для разработки и симуляции Proteus. Первое знакомство.
  • Интерфейс Proteus, назначение окон и меню.
  • Светоизлучающий диод, резистор, Blinker – первая программа.
  • Сборка отладочного стенда на контактной макетной плате.
  • Язык программирования С/С++.
  • Основные операторы языка С/С++.
  • Применение языка программирования С/С++ на практике.
  • Отладка программного кода в среде Proteus.
  • Отладка программного кода на экспериментальном стенде.


Участники
:

  • Узнают типы современных микроконтроллеров, особенности подбора и применения.
  • Изучат основные среды разработки программ для микроконтроллеров.
  • Узнают особенности работы с программаторами.
  • Соберут, запрограммируют и отладят свой собственный проект на макетной плате.
  • Рассмотрят основные команды и особенности языка программирования С/С++.
  • Научатся выполнять отладку программного кода.


Начальная подготовка: базовые технические знания.


Продолжительность:
 4 дня.

 

Сравнительный обзор распространённых языков программирования для микропроцессорных систем

В настоящее время для микроконтроллеров фирмы Atmel существует множество языков программирования: от классического BASCOM-AVRBasic[1] до Assembler и C. Наиболее распространёнными являются язык ассемблера и язык C. В этих языках реализованы практически все возможности программирования встраиваемых систем на данном типе микроконтроллеров[2].

Рассмотрим общие особенности программирования на этих языках для существующих микропроцессорных систем, а также частности программирования в аппаратной среде микроконтроллеров, как встраиваемых микро-ЭВМ.

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

Как известно, все существующие языки программирования можно разделить на две основные категории:

  1. языки программирования низкого уровня;

  2. языки программирования высокого уровня.

К первой группе относят семейство языков ассемблера, например, Turbo Assembler, Macro Assembler. Эти средства разработки позволяют получить наиболее короткий и быстродействующий код.

Ко второй группе относятся упомянутые выше BASCOM-AVRBasic и язык программирования C.

Известно, что язык C, в некотором роде, занимает промежуточное положение, объединяя возможности языков высокого уровня с функциональностью языков ассемблера[3], однако, это не совсем так. Основные функции языков ассемблера имеют основанием низкоуровневый доступ к компьютеру, определяющий полноценную возможность управления процессором, что, с одной стороны, позволяет достигать максимальной скорости реакции программы на действия пользователя[4, с. 10], а с другой стороны позволяет достичь определённых преимуществ в размере конечного исполняемого кода программ[2].

У опытных программистов на языках высокого уровня, к которым всё-таки относится и язык программирования C, часто возникают возражения по описанным выше вопросам, основанные на том, что некоторые операторы языка C или даже Turbo Pascal напрямую преобразуются в машинные коды. Также допустимо утверждать, что такие языки программирования как FORTH обеспечивают непосредственный низкоуровневый доступ. Но несмотря на то, что C или иные языки программирования обеспечивают выполнение некоторых низкоуровневых операций, эти языки всё равно не могут сравниться с языком ассемблера в возможностях доступа к процессору [4, с. 9]. Высокоуровневые языки, несмотря на наличие возможности выполнения низкоуровневых операций, требуют комбинирования своих функций с функциями языка ассемблера, путём встраивания ассемблерного кода в код программ, написанных на этих языках[4, с.11][4, с.332][4, с.358].

Как уже было отмечено выше, ассемблер – это низкоуровневый язык программирования, что позволяет достичь значительного уровня оптимизации уже при непосредственном написании кода программы. При этом оптимизация достигается уже при программировании и её уровень контролируется непосредственно. Фактически, программируя, мы одновременно оптимизируем программу. При использовании автоматических компиляторов необходима синтетическая оптимизация. В настоящее время при программировании на языке C используются так называемые оптимизирующие компиляторы или оптимизаторы кода, например, компилятор фирмы Microsoft, упомянутый в статье [5].В таких системах оптимизация программного кода происходит при компиляции программы, то есть при преобразовании исходного текста программы в машинный код.

В настоящее время не существует единого мнения по вопросам доверия оптимизации, выполненной автоматически.

Обоснованием позиции, опирающейся на не совершенство синтетической оптимизации, может служить тестовый обзор [6]. Известно, что оптимизирующие компиляторы разных производителей имеют значительные различия при работе с различными комбинациями программного кода и по-разному переводят его в мнемонику конкретного микроконтроллера. Несмотря на то, что ядро и система команд микроконтроллеров AVR создавались в тесном сотрудничестве с фирмой IAR Microsystems, производителем компиляторов для языков программирования C/C++, как показано в обзоре [6] при использовании данного оптимизатора кода, также возможны неточности при генерации ассемблерных мнемокодов.

Несмотря на то, что автоматическая оптимизация кода значительно ускоряет разработку программ, часто она может приводить к трудно обнаруживаемым ошибкам конечного программного кода, рассмотрим следующий пример [7]:
unsigned short  int i;

void main (void)
{
DDRB  = 255;
PORTB = 0;
  while(1)
  {
    	if (PINB == 255) PORTB = 0;
    	else PORTB++;
    	for (i=0; i<10000; i++){}
	//Далее может быть иной программный код}}

Пример представляет собой программу на языке программирования C для микроконтроллера фирмы Atmel, семейства AVR. В верхней строке программы объявляется глобальная переменная i типа без знаковое короткое целое (unsigned short int), которая согласно [3, с. 18] имеет размер два байта и может принимать значения от 0 до 65535.  Данная переменная будет использоваться позднее для организации цикла задержки. Далее происходит инициализация аппаратных портов ввода-вывода микроконтроллера. Внутри бесконечного цикла while(1), значимость которого при программировании микроконтроллеров рассмотрена ниже, расположен программный код, изменяющий значение на контактах порта B микроконтроллера AVR по следующему правилу: если на всех контактах порта B обнаруживаются потенциалы единицы, то обнулить контакты, иначе увеличить значение в регистре-защёлке порта B. Последний цикл без выполняемого в теле кода предназначен для формирования задержки вывода для того, чтобы изменение потенциалов порта B можно было зафиксировать, например, с помощью светодиодов. Далее следует комментарий.
Если включить автоматическую оптимизацию, то компилятор сочтёт цикл задержки бесполезной тратой времени и исключит его из программы[7].  Таким образом, изменение параметров порта B не может быть зафиксировано. Если же программная задержка важна для разрабатываемой системы, то последствия могут оказаться непредсказуемыми.
Из вышесказанного можно заключить, что автоматическая оптимизация на данном этапе своего развития нуждается в изменениях и доработках и к её использованию не следует прибегать повсеместно, что делает её малозначительным преимуществом языков программирования высокого уровня.
В большинстве публикаций, посвящённых языку ассемблера [4, с. 11], указывается на непереносимость и аппаратную зависимость программ, написанных на нём, по сравнению с языками высокого уровня, такими как C. Однако, программы на языке C также могут быть аппаратно зависимыми и вследствие чего непереносимыми, особенно, при работе с графическими контроллерами. Некоторые функции неработоспособны при программировании под графические контроллеры различных производителей.  Таким образом, приходится разрабатывать различные наборы функций для прямого взаимодействия с драйверами видеокарт [8, с.249].  Кроме того, программы автоматической оптимизации кодов, созданные для языка C, о которых написано выше, сами являются аппаратно зависимыми и непереносимыми, например, считающийся одним из лучших компиляторов Intel C Compiler производит некорректную оптимизацию программ для процессоров других производителей [9].
	Известно утверждение, что программирование на языке ассемблера затруднено слабой читаемостью программ, что в свою очередь приводит к большему числу ошибок при программировании на этом языке, нежели на языке программирования C  [2]. В данном случае читаемость программ, как и количество в них ошибок, занесённых при программировании, зависит в большей степени от опыта, внимательности и стараний программиста, а также от того факта, насколько хорошо известен разработчику тот или иной язык программирования[4, с.  11]. Кроме того, за якобы лучшей читаемостью программ, написанных на языке программирования C, скрывается множество недокументированных возможностей, как отрицательно, так и положительно влияющих на правильную работу конечного программного продукта. Язык программирования C – громоздкий язык. Таким образом, хотя разработка программ на языке C, при поверхностном взгляде, быстрее программирования на языке ассемблера, однако программирование на нём требует знания нюансов, без которых написание корректно работающих программ невозможно [10, с.104]. Язык ассемблера, в свою очередь, представляет собой набор простых правил, изучив которые, можно уверенно программировать на нём, а знание и изучение архитектуры целевой микропроцессорной системы упрощает процесс программирования и последующего чтения программ [7]. 
Сегодня большинство программистов убеждены, что одним из основных преимуществ языка C по отношению к языку ассемблера является наличие библиотечных программ, например, подпрограмм вычисления сложных выражений, вида (x* 2 + 8) [4, с. 11]. Несмотря на удобство программирования с их использованием, следует признать, что отсутствие встроенных библиотечных программ, скорее преимущество языка ассемблера, нежели его недостаток, так как при использовании таких программ в языках высокого уровня теряется возможность полного управления ресурсами компьютера и, следовательно, возможность написания максимально эффективных, быстрых и компактных программ, кроме того существует большое количество ассемблерных библиотек, позволяющих выполнять операции, характерные для языков высокого уровня[4, с.11], например, стандартные библиотеки адресации для микроконтроллеров фирмы Atmel, позволяют обращаться к регистрам и портам микроконтроллера аналогично программам на C, в противном случае пришлось бы вручную изучать адреса регистров и вносить их в управляющие конструкции [11].
Из всего вышесказанного может сложиться впечатление, что автор данного обзора является противником программирования на языке C.  Это не так, в течение пятнадцати лет программирования автора, из которых десять лет посвящено изучению языка C, к изучению которого автор приступил ранее, чем к изучению языка ассемблера, был сделан вывод, что последний оказался практически эффективнее по сравнению с языком программирования C. В условиях программирования малых микропроцессорных систем и однокристальных микро-ЭВМ, к которым относятся микроконтроллеры, в частности фирмы Atmel, а такие технические особенности этих микроконтроллеров, как развитая регистровая память, включающая тридцать два регистра общего назначения, исключают необходимость использования сложных высокоуровневых языков программирования, хотя и допускают её [11].
Как можно заключить из вышеописанного, преимущества языка программирования C достаточно спорны. В настоящее время он обладает одним принципиальным преимуществом, а именно знакомство с ним большинства программистов, которые программировали на нём изначально для персональных компьютеров с процессорами архитектуры x86.  Особенностью такой архитектуры является наличие единственного регистра, в общем используемого и для пересылок и для арифметических операций[4, с.53], в этих условиях переход к высокоуровневым языкам является естественным, но, как уже было замечено выше, технические особенности архитектуры Enhanced RISC, микроконтроллеров фирмы Atmel позволяют отказаться от высокоуровневых языков при программировании[11]. Таким образом, если большинство программистов по каким-то причинам не пожелали использовать или изучить язык ассемблера, язык программирования C подходит для использования в случаях, когда группа программистов работает над программным кодом для одной задачи. Здесь требуется достоверная читаемость кода каждым из них субъективно, и язык C становится своеобразным «Lingua Franca» программирования, подобно английскому языку.  Для написания же эффективных, быстродействующих и компактных программ язык ассемблера предпочтительнее языка C.
Общение автора данного обзора с программистами систем на микроконтроллерах, работающих с языком C и знающих его достаточно хорошо, показали, что они по непонятным причинам демонстрируют нежелание изучать и использовать язык ассемблера. Несмотря на то, что они часто сталкиваются с описанными выше «подводными камнями» языка при отладке программ, тратя на неё при этом значительное количество времени, язык ассемблера вызывает у них отторжение, как на техническом уровне, так и психологически. Причин неприязни они, зачастую, не называют, либо говорят об описанных выше спорных.
Как говорил классик программирования Дональд Кнут, «каждый, кто всерьёз интересуется компьютерами, должен рано или поздно изучить по крайней мере один машинный язык» [7].  Как показал опыт автора, проблемы в освоении языка ассемблера, связаны с недостаточным знанием английского языка.  Язык ассемблера – необычный компьютерный язык. Почти весь текст исходной программы состоит из непроизносимых слов cli, movsb, sbb [4, c. 17] в архитектуре x86, или ADD, TST, SBR, CBR,  RJMP [11] в архитектуре RISC, микроконтроллеров AVR, фирмы Atmel. Человек, не владеющий английским языком в должной мере, предпочитает распространённые языки программирования высокого уровня, где операторы если и не постигаются интуитивно, то зачастую имеют многозначное толкование в соответствии с множеством вариантов использования. Программисты запоминают операторы высокоуровневых языков программирования, в большей степени основываясь не на логике, которое несёт название функции, а на логике выполняемых оператором действий.  Например, студенты, изучающие немецкий язык, при изучении языка программирования BASIC, часто неверно произносят названия функций и команд данного языка программирования, но это не мешает им постигать программирование на этом языке [12, с. 5]. При изучении языка ассемблера мнемонические операторы имеют в большинстве случаев однозначное соответствие между названием оператора и выполняемым им действием и изучение в этом случае должно также основываться на знании, понимании и правильной интерпретации названий и расшифровок операторов для успешного программирования в будущем. Например, упоминавшийся выше, оператор cli, означает clear if, то есть сброс флага разрешения прерываний if и представляет собой сокращение [4, с.484], а оператор SBR аббревиатуру от Set Bit(s) in Register [12] и т. п. Кроме того, опыт автора показал, что большинство руководств по языку ассемблера для микроконтроллеров имеют также ошибки, намеренно или случайно допущенные при переводе на русский язык, и программа, написанная с использованием таких руководств неработоспособна. Только при использовании оригинальных, зачастую англоязычных руководств по применению языка ассемблера становится возможным их практическое применение, что является ещё одним стимулом к изучению английского языка программистами.
Отдельно хотелось бы заметить, что хотя язык ассемблера считается языком программирования для профессионалов [13, с. 104] [14 c. 130] он не так сложен. Преимуществами языка ассемблера является, низкоуровневый доступ к процессору, достижение максимальной скорости за счёт возможности полностью управлять процессом вычисления, компактность и скорость программ [4, с.10]. Программам на языке ассемблера присуща точность исполнения заложенного алгоритма в отсутствии описанных выше нюансов, основанных на своеобразном «языковом барьере» между высокоуровневым языком программирования и реальным вычислительным процессом, так как программы на языках высокого уровня преобразуются в машинные коды опосредованно посредствам промежуточного языка, ассемблерные мнемонические операторы имеют прямое соответствие «код-машинная операция»  [3],[4], [13],[14].  Как уже отмечалось выше, язык ассемблера чрезвычайно эффективен в условиях систем на микроконтроллерах фирмы Atmel, также большинство программ для микроконтроллерных систем сохранили условности характерные для традиционных технологий программирования, при которых имеется ограничение на используемые вычислительные ресурсы и от программ требуется прежде всего эффективность и компактность [15]. При таких условиях, в большинстве случаев, возможностей языка ассемблера достаточно, а возможности языка C избыточны.
В заключение хотелось бы процитировать авторитетного автора, специалиста по языку ассемблера, Тома Свана, в предисловии к своей книге «Освоение Turbo Assembler» он пишет: «…если кто-то вам говорил, что ассемблер очень сложен, не верьте.»[4, с.5].

Литература:
  1. Atmel AVR Basic Compiler (BASCOM) // Официальный сайт [Электронный ресурс] – режим доступа: http://microcontrollershop. com/product_info.php?products_id=352
  2. Программирование микроконтроллеров AVR // Электронный журнал «Мой робот» [Электронный ресурс] – режим доступа: http://myrobot.ru/stepbystep/mc_programming.php
  3. Глушаков, С.В., Программирование на C++ [Текст]  / C.В. Глушаков, Т.В. Дуравкина – М.:АСТ, 2008 – 685 с.
  4. Сван, Том, Освоение Turbo Assembler: Пер. с англ. [Текст] / Том Сван – К.;М.;СПб.: Диалектика, 1996 – 544 с.
  5. Оптимизация компилятора // Электронный журнал «Техника оптимизации» [Электронный ресурс] – режим доступа: http://howoptimize. ru/optimization.html
  6. Missed Optimization // Электронный журнал «EasyElectronics.ru» [Электронный ресурс] – режим доступа: http://we.easyelectronics.ru/AVR/missed-optimization.html
  7.  Ассемблер или C? // Электронный журнал «Controller systems» [Электронный ресурс] – режим доступа: http://controllersystems.com/books/praktika_programmirovaniya_atmel_avr/assembler-ili-s.html
  8. Фленов, Михаил, Искусство программирования игр на C++ [Текст] // Михаил Фленов – СПб. :БХВ-Петербург, 2006 – 256 с.
  9. Придётся ли Intel убрать из компилятора функцию, намеренно выдающую плохой код для процессоров AMD? // Электронный журнал «Железные войны» [Электронный ресурс] – режим доступа: http://www.holyware.ru/viewtopic.php?f=52&t=2296
  10. Касперски Крис, Сишные трюки // Крис Касперски – журнал «Хакер», август 2008 (116) 2008, с.104
  11. Atmel AVR ATiny213 Datasheet // Atmel Microcontroller Manuals [Электронный ресурс] – режим доступа: http://www.myrobot.ru/downloads/datasheet_t2313.php
  12. Сафронов И., Бейсик в задачах и примерах [Текст] // И. Сафронов – Д.;К.;М.;СПб.: БХВ-Петербург, 2000 – 224 с.
  13. Авдюхин, Алексей,  Высокий уровень программирования // Алексей Авдюхин – журнал «Хакер», июль 07 (127) 2009, с.104
  14. Лебединский, Юрий, Роман с ВМ // Юрий Лебединский – журнал «PC Magazine Russian Edition – Компьютер сегодня», №1 (127), январь 2002, с. 130
  15. Павловская, Т.А., C/C++ Программирование на языке высокого уровня [Текст] / Т.А.Павловская – СПб.:Питер, 2004 – 461с.

Основные термины (генерируются автоматически): язык ассемблера, язык программирования, язык, AVR, высокий уровень, PORTB, микроконтроллер фирмы, программа, программирование, программный код.

Плата микроконтроллера SwiftIO на базе Arm Cortex-M7 предназначена для языка программирования Apple Swift


Язык программирования Swift был разработан Apple для iOS, iPadOS, macOS, watchOS, tvOS и Linux. Язык программирования работает с фреймворками Apple Cocoa и Cocoa Touch, а также с существующим кодом Objective-C, написанным для продуктов Apple.

MadMachine создала плату для разработки на базе Arm Cortex-M7 под названием SwiftIO, специально разработанную для языка программирования Swift с помощью MadMachine IDE и инфраструктуры SwiftIO.

Технические характеристики оборудования SwiftIO:

  • SoC – кроссоверный процессор NXP i.MX RT1052 Arm Cortex-M7 с тактовой частотой 600 МГц
  • Системная память – 32 МБ SRAM
  • Хранилище – слот для карты MicroSD с поддержкой SD-карт стандартной и большой емкости
  • USB – 1x разъем Micro USB для питания, 1x разъем Micro USB для последовательной связи
  • Расширение — 2x 46 GPIO разъема с 12x 12-битными аналого-цифровыми преобразователями (ADC), 4x UART, 2x CAN, 2x IIC, 2x SPI, 14x PWM
  • Разное — встроенный RGB-светодиод, кнопки загрузки и сброса
  • Электропитание — 5 В через порт Micro USB
  • Размеры — требуется уточнение
Схема распиновки

MadMachine IDE является эквивалентом Arduino IDE для плат, совместимых с Arduino, и позволяет разрабатывать программы Swift в Mac OS X или Windows, с поддержкой Linux.

Схема архитектуры программного обеспечения показывает, что плата использует операционные системы реального времени Zephyr, а MadMachine предоставляет высокоуровневый API для управления вводом-выводом с использованием языка программирования Swift.

Поскольку MadMachine IDE еще не доступна для Linux, мы установили IDE (270 МБ) на виртуальную машину Windows, и рабочий процесс разработки похож на то, что вы делали бы с платами Arduino, поскольку полученный двоичный файл загружается на плату через кабель micro USB. Вот как выглядит скетч Blink:

/// Turn on and off the onboard LED continuously.
/// Import the library to enable the relevant classes and functions.
import SwiftIO
 
/// Initialize the onboard green LED with other parameters set to default.
let green = DigitalOut(Id.GREEN)
 
/// Blink the LED over and over again.
while true {
    // Apply a high votage and turn off the LED.
    green.write(true)
    // Keep the light off for a minute.
    sleep(ms: 1000)
    // Apply a low voltage and turn on the LED. 
    green.write(false)
    // Keep the light on for a minute.
    sleep(ms: 1000)
}

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

Вы также найдете документацию и примеры кода на Github.

Плату SwiftIO Arm Cortex-M7 можно приобрести сейчас за 68 долларов в магазине MadMachine, а также есть комплект стоимостью 118 долларов с различными компонентами, такими как зуммер, резисторы, сервопривод и т. д., позволяющий начать разработку электроники с использованием Swift. Более подробную информацию можно найти на сайте MadMachine.io.

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

Оригинал статьи вы можете прочитать здесь.

Программирование микроконтроллеров

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

Если попробовать описать технику, как нечто живое, можно сказать, что сердце каждого изделия – это микроконтроллер, точнее, схемы на микроконтроллерах. Микроконтроллер по своей сути это схема, но схема непростая, очень хитрая и особенная схема.

Это такой себе маленький компьютер. Именно самый настоящий компьютер, потому как в этой схеме есть абсолютно все:

  • память постоянная,
  • память оперативная,
  • и многое-многое другое. Если микроконтроллер, то есть, как принято его называть МК, не есть сердцем той или иной техники, то уж ее мозгом является стопроцентно.


Когда появился и как развивался МК


Официальной датой появления на свет первого микроконтроллера можно считать 1971 год, именно тогда два инженера технолога популярной американской компании Texas Instruments представили миру свое изобретение – сложный однокристальный микро-ЭВМ. В том же году они запатентовали свое изобретение (получили на него патент).

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

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

  • язык ассемблера (самый распространенный),

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


Предлагаю в качестве подарка скачать бесплатную книгу: причины зависаний на ПК, восстановление данных, компьютерная сеть через электропроводку и много других интересных фишек.
Еще больше интересных новостей, а главное общение, решений ваших проблем! Добавляйтесь в телеграм – https://t.me/mycompplus

Понравилась полезная статья? Подпишитесь на RSS и получайте больше нужной информации!


Программирование микроконтроллеров

Классификация и выбор микроконтроллеров
Организация памяти микроконтроллера
Порты ввода-вывода
Таймеры-счетчики
Прерывания
Аналого-цифровой преобразователь
Интерфейсы связи


Микропроцессором называется программно-управляемое устройство, осуществляющее процесс обработки цифровой информации и управление им. Микропроцессор реализуется в виде большой (БИС) или сверхбольшой (СБИС) интегральной микросхемы. Микропроцессор выполняет роль процессора в цифровых системах различного назначения.

Главной особенностью микропроцессора является возможность программирования логики работы.

Микроконтроллер (MCU) – микросхема, предназначенная для управления электронными устройствами. Типичный микроконтроллер сочетает в себе функции процессора и периферийных устройств, может содержать ОЗУ и ПЗУ. По сути, это однокристальный компьютер, способный выполнять простые задачи. Использование одной микросхемы, вместо целого набора, как в случае обычных процессоров, применяемых в персональных компьютерах, значительно снижает размеры, энергопотребление и стоимость устройств, построенных на базе микроконтроллеров.

Микропроцессорная система (МПС) представляет собой функционально законченное изделие, состоящее из одного или нескольких устройств, главным образом микропроцессорных: микропроцессора и/или микроконтроллера.

Микропроцессорное устройство (МПУ) представляет собой функционально и конструктивно законченное изделие, состоящее из нескольких микросхем, в состав которых входит микропроцессор; оно предназначено для выполнения определенного набора функций: получение, обработка, передача, преобразование информации и управление.

Основные преимущества микропроцессорных систем по сравнению с цифровыми системами на «жесткой логике».

  • Многофункциональность: большее количество функций может быть реализовано на одной элементной базе.
  • Гибкость: возможность исправления и модификации программы микропроцессора для реализации различных режимов работы системы.
  • Компактность: миниатюрные габариты микросхем и уменьшения их количества по сравнению с реализацией на «жесткой логике» позволяют уменьшить габариты устройств.
  • Повышение помехоустойчивости: меньшее количество соединительных проводников способствует повышению надежности устройств.
  • Производительность: возможность применения больших рабочих частот и более сложных алгоритмов обработки информации.
  • Защита информации: возможность защитить программу микропроцессора от считывания позволяет защитить авторские права разработчиков.

Хотя микропроцессор является универсальным средством для цифровой обработки информации, однако отдельные области применения требуют реализации определенных специфических вариантов их структуры и архитектуры. Поэтому по функциональному признаку выделяются два класса: микропроцессоры общего назначения и специализированные микропроцессоры. Среди специализированных микропроцессоров наиболее широкое распространение получили микроконтроллеры, предназначенные для выполнения функций управления различными объектами, и цифровые сигнальные процессоры (DSP – Digital Signal Processor), которые ориентированы на реализацию процедур, обеспечивающих необходимое преобразование аналоговых сигналов, представленных в цифровой форме.

Неполный список периферии, которая может присутствовать в микроконтроллерах, включает в себя:

  • различные интерфейсы ввода-вывода, такие как UART, I²C, SPI, CAN, USB, ETHERNET;
  • аналого-цифровые и цифро-аналоговые преобразователи;
  • компараторы;
  • широтно-импульсные модуляторы;
  • таймеры-счетчики;
  • генератор тактовой частоты;
  • контроллеры дисплеев и клавиатур;
  • массивы встроенной флэш-памяти.

Идея размещения на одном кристалле микропроцессора и периферийных устройств принадлежит инженерам М. Кочрену и Г. Буну, сотрудникам Texas Instruments. Первым микроконтроллером был 4-х разрядный TMS1000 от Texas Instruments, который содержал ОЗУ (32 байта), ПЗУ (1 кбайт), часы и поддержку ввода-вывода. Выпущенный в 1972 году, он имел новую по тем временам возможность – добавление новых инструкций.

В 1976 году (через 5 лет после создания первого микропроцессора) на свет появился первый микроконтроллер фирмы Intel, получивший имя 8048. Помимо центрального процессора, на кристалле находились 1 килобайт памяти программ, 64 байта памяти данных, два восьмибитных таймера, генератор часов и 27 линий портов ввода-вывода. Микроконтроллеры семейства 8048 использовались в игровых консольных приставках Magnavox Odyssey, в клавиатурах первых IBM PC и в ряде других устройств.

На сегодняшний день среди крупных производителей микроконтроллеров следовало бы упомянуть Atmel, Microchip, ST Microelectronics, Texas Instruments, Freescale Semiconductor, NXP и др.


ресурсов для прототипирования: основы новых языков для программирования микроконтроллеров

Спецификации микроконтроллера

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

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

Какой язык лучше? Четкого ответа нет, потому что это зависит от приложения, над которым вы работаете. Чтобы помочь вам спланировать свое развитие, вот подробное исследование различных языков, доступных для использования микроконтроллером, а также ресурсы для дальнейшего изучения. Вы также можете ознакомиться с нашей предыдущей статьей о языках для встраиваемых систем, которая охватывает Rust, Python, VHDL и Verilog.

C и сборка

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

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

Assembly предлагает альтернативу C с некоторыми преимуществами. Ассемблер – это более старый язык, который часто использует код, специфичный для устройства, который конвертируется с помощью служебной программы ассемблера.Используя этот язык, пользователь имеет прямой доступ к ЦП, где процедуры могут быть тщательно отрегулированы для точных приложений синхронизации. Сборка предлагает лучшее использование ЦП, а также дополнительные наборы инструкций, которые C не поддерживает, такие как манипуляции с битами с помощью определенных инструкций BIT.

Подробнее:

MicroPython

Python – это многофункциональный интерпретируемый язык, известный своей простотой, ясностью и универсальной адаптируемостью. Эти особенности также делают язык слишком большим для микропроцессоров.Однако с помощью кампании на Kickstarter в 2013 году физик Дэмиен Джордж смог адаптировать Python в уменьшенную версию MicroPython, которая подходит для использования на микроконтроллере.

Код

MicroPython является открытым исходным кодом по лицензии MIT. Язык работает на «голом железе» микропроцессора с использованием небольшого подмножества стандартной библиотеки Python. Он может работать, используя только 256 КБ пространства и 16 КБ ОЗУ, но он разработан так, чтобы быть максимально совместимым с обычным Python.

Схема PyBoard, официальной платы микроконтроллера MicroPython. Изображение предоставлено MicroPython

Первоначально разработанный для работы в системах на базе ARM, включая BBC micro: bit, Adafruit Circuit Playground Express и MicroPython PyBoard, он также был доступен для других процессоров, включая ESP8266 и ESP32.

MicroPython отлично подходит для создания прототипов сложных проектов. На ESP8266, например, создание проектов IoT может быть выполнено с помощью нескольких простых вызовов функций, чтобы подключить проект MicroPython к локальной точке Wi-Fi и начать потоковую передачу информации брокеру MQTT.

Узнать больше:

Blockly

Blockly – это библиотека программирования с открытым исходным кодом, поддерживаемая Google, цель которой – сделать код визуально логичным с помощью блоков перетаскивания.

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

Скриншот интерактивной демонстрации Blockly, любезно предоставленной Google for Education

После создания блока пользователи могут экспортировать свой код Blockly на нескольких языках, включая JavaScript, Python, PHP, Lua и Dart. Одним из преимуществ системы Blockly является то, что почти невозможно возникновение ошибок (не ошибок или ошибок, а просто старых ошибок), поскольку блоки требуют определенных соединений и не позволяют подключаться несовместимым блокам.

Хотя этот метод программирования доступен на многих платформах, включая Micro Bit и Adafruit Circuit Playground Express, он не предназначен для использования в конечном коммерческом продукте. Однако это очень полезно на этапах создания прототипа, особенно если требуется проверка концепции и изучение специфики устройства займет слишком много времени (например, регистров, битов конфигурации и конфигурации IDE).

Узнать больше:

Arduino C ++

Хотя его часто называют «языком программирования Arduino», на самом деле Arduino запрограммирован на старом-добром C ++ и использует подмножество библиотек, специфичных для Arduino.

Отличия Arduino C ++ от обычного C ++ заключаются в общих подпрограммах для микроконтроллеров, поскольку функции стандартной библиотеки C ++ не могут работать с их ограниченной мощностью и памятью.

Плата Arduino Uno. Изображение любезно предоставлено Arduino.

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

Преимущество использования Arduino C ++ заключается в том, что он подходит для коммерческих сред, работает быстрее, чем более крупные языки, такие как Python, и очень портативен. Компиляция кода на ядре ARM изначально для Uno автоматически выполняется библиотекой с использованием общих функций.

Подробнее:

BASIC

BASIC – это язык, который впервые появился в 60-х годах и пережил свой расцвет с появлением персональных компьютеров в 80-х. BASIC (аббревиатура от All-Purpose Symbolic Instruction Code для начинающих) по-прежнему используется по сей день благодаря своей простоте и интерпретируемому характеру, что позволяет дизайнеру уделять больше внимания аппаратному обеспечению и меньше – программному обеспечению.

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

Изображение любезно предоставлено Чарльзом Р. Хэмптоном.

Два примера использования BASIC в микроконтроллерах – это BASIC Stamp (производимый Parallax) и PICAXE, которые производятся PICAXE и используют микроконтроллеры Microchip PIC.BASIC – хороший язык для прототипирования и даже разработки оборудования, но его следует избегать в коммерческих продуктах из-за его низкой скорости и энергопотребления.

Подробнее:

Заключение

Раньше при работе с микроконтроллерами проектировщику приходилось выбирать предпочитаемую платформу, а затем изучать язык, который она использует. С развитием языков и программного обеспечения в наши дни язык может решать, какую платформу будет использовать дизайнер. Если разработчик ищет конкретную функцию, такую ​​как поддержка GPIO, сеть, возможность общаться через SSH или другие, то выбор языка и систем может быть важным фактором в поиске наилучшего пути разработки.

Язык, который выбирают пользователи, важен, но всегда полезно помнить, что не существует таких понятий, как «единственный лучший язык» или «единственный лучший микроконтроллер». В конце концов, лучший выбор – это то, что требует приложение.

ТОП-15 лучших языков программирования для встроенных систем

По мере того, как миллениалы продолжают стремиться к технологически устойчивому и инновационному обществу, мы начинаем осознавать реальный потенциал IoT (Интернета вещей) в нашей повседневной жизни.Устройства Интернета вещей меняют наш образ жизни более тонким образом, чем вы думаете. Каждое современное устройство – от вашего последнего Kindle до SmartWatch – является частью этого Интернета вещей. Эти устройства также необходимо программировать так же, как компьютер или мобильное устройство, их более традиционные аналоги. Программирование таких устройств известно как программирование встроенных систем. Однако программирование встроенных систем – немного более утомительная задача, чем думает большинство разработчиков. Они требуют низкоуровневого доступа к системе и должны использовать как можно меньше ресурсов.Таким образом, только избранный набор языков подходит для программирования встроенных систем.

Лучшие языки для программирования встроенных систем

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

1. C

Один из самых мощных языков программирования, который когда-либо появлялся, C является фактическим выбором для программирования встроенных систем. Это вовсе не удивительный факт из-за низкоуровневого доступа, предоставляемого этим языком. Низкое использование памяти скомпилированной программой на C также является фактором признания C как лучшего языка программирования для встроенных систем. Кроме того, этот статически типизированный язык также предлагает скорость, которой нет ни у одного другого языка программирования.

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

2. C ++

Если C – лучшее решение для программирования встроенных систем для новичков, то C ++ определенно больше подходит для опытных разработчиков. Этот удивительно быстрый язык, как и C, предлагает не только доступ к низкоуровневым системным ресурсам, но также гарантирует, что стек памяти свободен от ненужных системных вызовов.Благодаря единообразному предложению парадигмы объектно-ориентированного программирования, разработчики-ветераны могут достичь намного большего с помощью C ++, чем его предшественник.

Основные особенности этого языка программирования
  • C ++ позволяет использовать встроенные функции в качестве замены определений макросов, чего в C определенно не хватает.
  • Благодаря умной реализации шаблонов и подробному приведению типов, C ++ намного безопаснее своего предшественника.
  • Возможность использовать перегруженные функции и конструкторы делает C ++ идеальным выбором для программирования встроенных систем.
  • Объектно-ориентированная природа C ++ позволяет разработчикам программировать даже самые сложные встроенные системы без переполнения памяти.
  • Функция пространства имен, представленная в C ++, гарантирует, что ваша программа не выйдет из строя только из-за проблем с конфликтами имен.
  • Встроенный конструктор и деструктор позволяет C ++ быть более универсальным, чем его более традиционный предшественник.

3. Java

Java – это не только возможное решение для традиционного программного обеспечения для настольных ПК, но и отличный кандидат для программирования встроенных систем.Благодаря своей стабильной природе и доступности многочисленных инструментов разработки, программы на Java обычно пользуются большим уважением среди разработчиков встроенных систем. Более того, как только вы напишете свою встроенную системную программу на Java, вы сможете легко перенести ее на различные платформы IoT, и все благодаря инновационной реализации JVM.

Основные особенности этого языка программирования
  • Java значительно упрощает написание расширяемых, переносимых и загружаемых приложений для встроенных систем.
  • Широкий спектр инструментов разработчика и мощных библиотек делают Java подходящим выбором для программирования встроенных систем.
  • Программы Java не зависят от машины – поскольку они выполняются внутри виртуальной машины Java (JVM).
  • Java дает разработчикам возможность изолировать критические части своих встроенных приложений от остальной части кода.
  • Программы, написанные на Java, очень быстрые и работают без сбоев даже на оборудовании старого поколения.
  • Обработка исключений в Java очень практична и позволяет довольно легко устранять большинство ошибок времени выполнения.

4. Python

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

Основные особенности этого языка программирования
  • Python – это интерпретируемый язык, что означает, что вам потребуется среда выполнения Python для запуска программ Python.
  • Python – лучшее возможное решение для написания тестов автоматизации для ваших встроенных систем реального времени.
  • Разбор журналов и обработка изображений очень легко выполнить с помощью Python.
    Python отлично подходит для создания встроенных систем, обрабатывающих данные в режиме реального времени.
  • Python, пожалуй, лучшее решение для написания сетевой части ваших передовых встраиваемых систем.
  • Прототипировать приложение на Python довольно просто, что делает его пригодным для разработки встроенных программ за короткий период разработки.

5. Ржавчина

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

Основные особенности этого языка программирования
  • Управление памятью в Rust очень гибкое и позволяет разработчикам распределять память как динамическим, так и статическим способом.
  • Потрясающая модель параллелизма в Rust является надежной и гарантирует, что никакие два потока не будут использовать одно и то же состояние во время выполнения.
  • Разработчики могут легко интегрировать Rust в уже существующую кодовую базу C или C ++ без каких-либо проблем.
  • От небольших микроконтроллеров до мощных SBC, Rust позволяет легко переносить код вашей встраиваемой системы в широкий спектр систем.
  • Rust предлагает отличную поддержку сообщества, которая может гарантировать, что программирование ваших встроенных систем не окажется в тупике.

6. Ада

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

Основные особенности этого языка программирования
  • Ada – лучший выбор для встраиваемых систем, которые стремятся быть чрезвычайно надежными.
  • Построенный для Министерства обороны США, Ada использовалась только для разработки более сотен встроенного военного оборудования.
  • Вы можете компилировать разные пакеты Ada по-разному и при необходимости включать их в свою систему.
  • Проверки времени выполнения
  • Ada предлагают надежную защиту от распространенных ошибок, таких как нераспределенная память, ошибки переполнения буфера, нарушения диапазона и единичные ошибки.
  • Функция динамической отправки, предлагаемая Ada, помогает вашему встроенному приложению разумно использовать полиморфизм.

7. JavaScript

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

Основные особенности этого языка программирования
  • JavaScript – это динамический язык, похожий на Python и Ruby.
  • Огромный набор инструментов для разработчиков и сторонних библиотек делает JavaScript подходящим выбором для разработки быстрого и надежного встроенного программного обеспечения.
  • С появлением ASM.js из Mozilla, использование JavaScript во встраиваемых системах с каждым днем ​​увеличивается.
  • Управляемая событиями парадигма функционального программирования, используемая в JavaScript, может быть использована для простого создания стабильных встроенных систем.
  • JavaScript имеет встроенную поддержку синтаксического анализа регулярных выражений. Таким образом, для этой утомительной задачи вам не потребуются другие библиотеки.

8. Перейти

Go (сокращение от Golang) – это новейший язык программирования от веб-гиганта Google.Это статически типизированный скомпилированный язык, подходящий для программирования встраиваемых систем из-за его безопасности памяти и параллелизма в стиле CSP. Go сочетает в себе низкоуровневые функции, представленные в C и C ++, более современным и элегантным образом. При правильном использовании он может повысить универсальность ваших последних встроенных систем. Функция структурной типизации, предлагаемая Go, гарантирует, что ваши встроенные системы не обнаружат нежелательных ошибок времени выполнения.

Основные особенности этого языка программирования
  • Go поставляется со встроенными функциями для модульного тестирования, что упрощает тестирование встроенного приложения.
  • Обширная документация по API этого языка программирования встраиваемых систем полезна как для начинающих, так и для опытных разработчиков.
  • Си-подобный синтаксис, принятый в Go, легко читать и запоминать.
  • Несмотря на то, что Go предлагает объектно-ориентированную функциональность, он довольно прост для понимания даже новичками в программировании.
  • Программы
  • Go можно очень легко скомпилировать и развернуть в вашей системе.
  • Фреймворк EMBD, основанный на Go, получил много похвал в сообществе подпольных встраиваемых систем.

9. Lua

Lua – один из основных языков, разработанных с учетом программирования встроенных систем. Это легкий, многопарадигмальный язык программирования, который легко расширяется и поддерживает несколько платформ из коробки. Lua предлагает ясный и простой синтаксис с очень небольшим объемом памяти, что делает себя идеальным кандидатом для создания встроенных систем реального времени. Превосходная функция описания данных Lua также делает его одинаково подходящим в качестве языка конфигурации.

Основные особенности этого языка программирования
  • Вы можете определять функции и управлять ими как первоклассными значениями в Lua, что упрощает его объектно-ориентированную реализацию.
  • Программы, написанные на Lua, легко расширяются благодаря резервному механизму.
  • Рефлексивные возможности
  • Lua позволяют разработчикам создавать чрезвычайно полиморфные компоненты.
  • Программы, написанные на Lua, можно легко использовать вместе с программами C.

10. B №

Один из лучших языков программирования для встраиваемых систем, который у нас появился в последнее время, – это B #. Этот язык является производным от семейства языков программирования C и разработан в Bell Labs теми же авторами C. Это довольно небольшой язык, состоящий из крошечного ядра и поддерживающий объектно-ориентированную парадигму. Вы также можете довольно легко управлять несколькими потоками с помощью B #.

Основные особенности этого языка программирования
  • B # был разработан исключительно с учетом программирования встроенных систем.
  • Он имеет синтаксические особенности, очень похожие на C и C ++.
  • B # поддерживает эффективные преобразования упаковки и распаковки.
  • Этот встроенный язык программирования имеет другие функции, такие как многопоточные операторы, свойства полей, регистры адресации устройств, обработчики прерываний и детерминированный дефрагментатор памяти.
  • B # исключительно подходит для небольших архитектур с жесткими ограничениями памяти.
  • Коды
  • B # напрямую отображаются на жесткий набор команд, что позволяет ускорить выполнение во встроенных устройствах с низким уровнем ресурсов.

11. Язык ассемблера

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

Основные особенности этого языка программирования
  • Assembly обеспечивает низкоуровневый доступ, необходимый для эффективного управления оборудованием.
  • Поскольку программы на ассемблере можно отследить точно, обнаружение этой досадной ошибки – лишь вопрос времени.
  • Встроенные приложения, написанные на ассемблере, очень эффективны в использовании памяти и работают быстро.
  • Язык ассемблера используется во встраиваемых системах из-за его способности решать критические проблемы производительности в системах с низким уровнем ресурсов.
  • Ассемблерные программы почти так же эффективны, как программы, написанные в машинных кодах.

12. C #

C # широко популярен для создания корпоративного программного обеспечения.Однако этот инновационный язык программирования также широко используется для разработки встроенных систем промышленного назначения. Благодаря своему строго типизированному, компонентно-ориентированному стилю программирования C # включает в себя множество полезных функций для программирования встроенных систем. Более того, поскольку Microsoft поддерживает этот язык программирования для встраиваемых систем, вы можете легко найти массу документации на этом языке.

Основные особенности этого языка программирования
  • C # имеет встроенную поддержку как для структурного, так и для объектно-ориентированного программирования.
  • Функция строгой проверки границ типов и массивов в C # устраняет множество трудно обнаруживаемых ошибок времени выполнения прямо во время компиляции.
  • Программы, написанные на C #, легко переносимы и без проблем могут использоваться в различных архитектурах.
  • Программирование встраиваемых систем было одним из ключевых моментов разработки C #.
  • Программы C # обычно эффективны с точки зрения памяти и процессора.

13. Verilog

Verilog – это HDL (язык описания оборудования) для разработки примитивных электронных устройств, таких как встроенные системы.Это широко используемый язык в области программирования встроенных систем, обеспечивающий очень низкоуровневый доступ к системному оборудованию. Вы можете получить доступ и контролировать практически все детали аппаратного обеспечения, включив этот язык в разработку своих встроенных систем. Если вы уже знакомы с синтаксисами в стиле C, то синтаксис Verilg покажется вам довольно знакомым.

Основные особенности этого языка программирования
  • Verilog позволяет разработчикам контролировать задержку распространения и уровень сигнала своей встроенной системы.
  • Он имеет два разных оператора присваивания, один для блокирующих назначений, а другой – для неблокирующих.
  • Это язык потока данных.
  • Verilog позволяет разрабатывать индивидуальное оборудование в соответствии с требованиями вашей встроенной системы.
    Переменные в языке Verilog требуют определенного размера.

14. VHDL

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

Основные особенности этого языка программирования
  • Программы, написанные на VHDL, обычно обрабатываются программой синтеза.
  • VHDL может довольно плавно обрабатывать параллельную обработку в большинстве современных встроенных устройств.
  • Он не чувствителен к регистру, поэтому ввод в верхнем и нижнем регистре неактивен.
  • Может использоваться как язык обработки текста общего назначения в примитивных архитектурах.
  • Как и Verilog, VHDL также является языком потока данных.

15. Встроенный C ++

Как следует из названия, Embedded C ++ – это подмножество языка программирования C ++, предназначенное исключительно для облегчения программирования встроенных систем. Диалект включает только те части C ++, которые активно используются в сообществе встраиваемых систем, и опускает ключевые функции C ++, такие как обработка исключений, множественное наследование, пространства имен, шаблоны и виртуальные базовые классы.Ключевые японские производители процессоров, такие как Hitachi, Fujitsu и Toshiba, объединились для создания этого диалекта C ++. Известные компании, такие как Apple, используют этот язык программирования встроенных систем для разработки драйверов устройств для своих Mac OS X.

Основные особенности этого языка программирования
  • Это подмножество популярного языка программирования C ++.
  • Любой стандартный компилятор C ++ может использоваться для компиляции встроенных программ, написанных на Embedded C ++.
  • Embedded C ++ пытается избежать чрезмерного потребления памяти, удаляя большинство основных функций C ++, которые не используются исключительно во встроенном системном программировании.
  • Встроенный C ++ опускает функцию идентификации типа среды выполнения (RTTI), представленную в C ++.
    Программы, написанные на этом языке, требуют для оптимизации компилятора EC ++.

Конечные мысли

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

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

  • Продукты
    • Доски Click Boards
      • Беспроводное подключение
        • GPS / GNSS
        • GSM / LTE
        • LTE IoT
        • BT / BLE
        • Wi-Fi + BLE
        • Wi-Fi
        • Приемопередатчики
        • Sub-1 GHz
        • Трансверы 2,4 ГГц
        • LoRa
        • RFID / NFC
        • GSM + GPS
        • 6LoWPAN
        • ZigBee
        • Click Shields
        • Наборы кликов
      • Датчики
        • Биометрия
        • Газ
        • Магнитный
        • Движение
        • Оптический
        • Давление
        • Близость
        • Температура и влажность
        • Датчик тока
        • Разное
        • Окружающая среда
        • Сила
        • Индуктивность
        • RF метр
        • Click Shields
        • Наборы кликов
      • Интерфейс
        • Адаптер
        • CAN
        • Расширитель портов
        • RS485
        • USB
        • 1-Wire
        • RS232
        • Ethernet
        • LIN
        • ШИМ
        • Текущий
        • ДАЛИ
        • I2C
        • Волоконная оптика
        • SPI
        • Click Shields
        • Наборы кликов
      • Дисплей и светодиоды
        • Драйверы светодиодов
        • Светодиодная матрица
        • Светодиодный сегмент
        • OLED
        • Адаптер
        • Электронный бумажный дисплей
        • ЖК-дисплей
        • Click Shields
        • Наборы кликов
      • Разное
        • Реле
        • Оптопара
        • ID
        • Proto
        • Шифрование
        • Click Shields
        • Наборы кликов
      • смешанный сигнал
        • АЦП
        • Измерения
        • ЦАП
        • Цифровой потенциометр
        • АЦП-ЦАП
        • Click Shields
        • Наборы кликов
      • Хранилище
        • EEPROM
        • ВСПЫШКА
        • РАМКА
        • microSD
        • MRAM
        • SRAM
        • Click Shields
        • Наборы кликов
      • Управление двигателем
        • матовый
        • Бесщеточный
        • Шаговый
        • Сервопривод
        • Click Shields
        • Наборы кликов
      • Аудио и голос
        • Усилитель
        • Микрофон
        • Спикеры
        • Обработка сигналов
        • Распознавание речи
        • FM
        • MP3
        • Click Shields
        • Наборы кликов
      • HMI
        • емкостный
        • Кнопки / переключатели
        • Потенциометры
        • Круговой энкодер
        • Тактильный
        • Click Shields
        • Наборы кликов
        • Отпечаток пальца
      • Часы и синхронизация
        • RTC
        • Тактовый генератор
        • Click Shields
        • Наборы кликов
      • Управление питанием
        • Зарядное устройство
        • Boost
        • баксов
        • линейный
        • Buck-Boost
        • Беспроводная зарядка
        • Click Shields
        • Наборы кликов
    • Necto
      • РУЧКА
        • С
          • mikroC AI для ARM
        • Дополнительное программное обеспечение
          • Визуальный TFT AI
      • ПОС
        • С
          • mikroC AI для PIC
        • Дополнительное программное обеспечение
          • Визуальный TFT AI
      • PIC32
        • С
          • mikroC AI для PIC32
        • Дополнительное программное обеспечение
          • Визуальный TFT AI
    • Компиляторы
      • ПОС
        • С
          • mikroC AI для PIC
          • mikroC PRO для PIC
        • Базовый
          • mikroBasic PRO для PIC
        • Паскаль
          • mikroPascal PRO для PIC
        • Дополнительное программное обеспечение
          • Лицензия CODEGRIP WiFi
          • CODEGRIP SSL лицензия
          • Визуальный TFT
          • Визуальный TFT AI
          • Визуальный GLCD
          • Диспетчер пакетов
          • микроБутлоадер
          • CAN калькулятор
          • GLCD Font Creator
          • Таймер-калькулятор
          • MikroPlot
      • ARM
        • С
          • mikroC AI для ARM
          • mikroC PRO для ARM
        • Базовый
          • mikroBasic PRO для ARM
        • Паскаль
          • mikroPascal PRO для ARM
        • Дополнительное программное обеспечение
          • Лицензия CODEGRIP WiFi
          • CODEGRIP SSL лицензия
          • Визуальный TFT
          • Визуальный TFT AI
          • Визуальный GLCD
          • Диспетчер пакетов
          • микроБутлоадер
          • CAN калькулятор
          • GLCD Font Creator
          • Таймер-калькулятор
          • MikroPlot
      • PIC32
        • С
          • mikroC AI для PIC32
          • mikroC PRO для PIC32
        • Базовый
          • mikroBasic PRO для PIC32
        • Паскаль
          • mikroPascal PRO для PIC32
        • Дополнительное программное обеспечение
          • Лицензия CODEGRIP WiFi
          • CODEGRIP SSL лицензия
          • Визуальный TFT
          • Визуальный GLCD
          • Диспетчер пакетов
          • микроБутлоадер
          • CAN калькулятор
          • GLCD Font Creator
          • Таймер-калькулятор
          • MikroPlot
      • dsPIC / PIC24
        • С
          • mikroC PRO для dsPIC
        • Базовый
          • mikroBasic PRO для dsPIC
        • Паскаль
          • mikroPascal PRO для dsPIC
        • Дополнительное программное обеспечение
          • Лицензия CODEGRIP WiFi
          • CODEGRIP SSL лицензия
          • Визуальный TFT
          • Визуальный GLCD
          • Диспетчер пакетов
          • микроБутлоадер
          • CAN калькулятор
          • GLCD Font Creator
          • Таймер-калькулятор
          • MikroPlot
      • АРН
        • С
          • mikroC PRO для AVR
        • Базовый
          • mikroBasic PRO для AVR
        • Паскаль
          • mikroPascal PRO для AVR
        • Дополнительное программное обеспечение
          • Лицензия CODEGRIP WiFi
          • CODEGRIP SSL лицензия
          • Визуальный TFT
          • Визуальный GLCD
          • Диспетчер пакетов
          • микроБутлоадер
          • CAN калькулятор
          • GLCD Font Creator
          • Таймер-калькулятор
          • MikroPlot
      • 8051
        • С
          • mikroC PRO для 8051
        • Базовый
          • mikroBasic PRO для 8051
        • Паскаль
          • mikroPascal PRO для 8051
        • Дополнительное программное обеспечение
          • Лицензия CODEGRIP WiFi
          • CODEGRIP SSL лицензия
          • Визуальный TFT
          • Визуальный GLCD
          • Диспетчер пакетов
          • микроБутлоадер
          • CAN калькулятор
          • GLCD Font Creator
          • Таймер-калькулятор
          • MikroPlot
      • FT90x
        • С
          • mikroC PRO для FT90x
        • Базовый
          • mikroBasic PRO для FT90x
        • Паскаль
          • mikroPascal PRO для FT90x
        • Дополнительное программное обеспечение
          • Лицензия CODEGRIP WiFi
          • CODEGRIP SSL лицензия
          • Визуальный TFT
          • Визуальный GLCD
          • Диспетчер пакетов
          • микроБутлоадер
          • CAN калькулятор
          • GLCD Font Creator
          • Таймер-калькулятор
          • MikroPlot
    • Доски разработчиков
      • ПОС
        • 8-е поколение
          • EasyPIC PRO v8
          • EasyPIC v8
        • 7-го поколения
          • EasyPIC v7a
          • EasyPIC PRO v7
          • EasyPIC v7
        • 6-го поколения
          • PICPLC16 v6
      • ARM
        • 8-е поколение
          • Fusion для ARM v8
          • Fusion для STM32 v8
          • Fusion для KINETIS v8
          • Fusion для TIVA v8
        • 7-го поколения
          • EasyMx PRO v7 для Tiva
          • EasyMx PRO v7 для STM32
      • PIC32
        • 8-е поколение
          • Fusion для PIC32
        • 7-го поколения
          • EasyPIC Fusion v7
      • dsPIC / PIC24
        • 7-е поколение
          • EasyPIC Fusion v7
          • EasyPIC v7 для dsPIC30
        • 6-го поколения
          • Easy24-33 v6
      • АРН
        • 7-е поколение
          • EasyAVR v7
        • 6-го поколения
          • AVRPLC16 v6
      • 8051
        • 7 поколение
          • BIG8051
        • 6-го поколения
          • Easy8051 v6
      • Универсальные доски
        • 8-е поколение
          • Fusion для ARM v8
        • 7-го поколения
          • EasyPIC Fusion v7
        • плата UNI-DS
          • UNI-DS6
          • mikroBoard для PIC 80-контактный
          • mikroBoard для AVR
          • mikroBoard для dsPIC
          • mikroBoard для PSoC
          • mikroBoard для 8051
          • mikroBoard для PIC 40-контактный
          • mikroBoard для ARM
          • mikroBoard для ARM 144-контактный
      • IoT – носимый
        • Hexiwear
          • Hexiwear
          • Hexiwear Power User Pack
          • Док-станция Hexiwear
          • Аккумулятор Hexiwear
          • Цветной набор Hexiwear
          • Рабочая станция Hexiwear
      • Аналоговые платы
        • 7-е поколение
          • Аналоговый системный лабораторный комплект PRO
    • Стартовые платы
      • ПОС
        • Кликер
          • PIC кликер
        • Кликер 2
          • Clicker 2 для PIC18FJ
        • Готово
          • Готов для PIC Board
          • Готов к PIC (DIP28)
          • PIC-Ready2 плата
          • MMC Готовая плата
        • StartUSB
          • StartUSB для PIC
      • ARM
        • Кликер
          • RA4M1 Кликер
          • Kinetis Clicker
          • MSP432 Clicker

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

2.

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

Микроконтроллер выполняет программу, загруженную в его память Flash . Это так называемый исполняемый код, состоящий из, казалось бы, причудливой последовательности нулей и единиц. В зависимости от архитектуры микроконтроллера этот двоичный код организован в виде слов шириной 12, 14 или 16 бит. Каждое слово рассматривается ЦП как инструкция, которая должна выполняться во время работы микроконтроллера. Поскольку нам намного проще иметь дело с шестнадцатеричной системой счисления, исполняемый код обычно представлен в виде последовательности шестнадцатеричных чисел, называемой шестнадцатеричным кодом , который давным-давно писал программист.Все инструкции, которые микроконтроллер может распознать и выполнить, в совокупности известны как набор инструкций . Для микроконтроллеров PIC с 14-битными программными словами набор команд включает 35 различных инструкций.

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

С другой стороны, программы всегда выполняются с высокой скоростью, и в большинстве случаев нет необходимости подробно знать, что происходит внутри микроконтроллера. Несмотря на все хорошие атрибуты языка ассемблера, программистам всегда был нужен язык программирования, аналогичный тому, который они используют в повседневной речи. Наконец, были созданы языки программирования высокого уровня, включая Basic. Основное преимущество этих языков – простота написания программ. Несколько инструкций по сборке теперь заменены одним оператором в Basic.Программисту больше не требуется знать набор команд используемого микроконтроллера. Больше невозможно узнать, как выполняется каждый оператор, но это все равно не имеет значения. В этом случае проблема решается добавлением в программу последовательности, написанной на языке ассемблера. Подобно языку ассемблера, специализированная программа, установленная на ПК, отвечает за компиляцию программы в машинный код. В отличие от ассемблера, компиляторы языков программирования высокого уровня создают исполняемый код, который не всегда является кратчайшим из возможных.На рисунке выше в общих чертах показано, что происходит в процессе компиляции программы, написанной на Basic, в шестнадцатеричный код. Вот пример простой программы, написанной на Basic:

ПРЕИМУЩЕСТВА ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ

Если у вас есть опыт написания программ для микроконтроллеров PIC на языке ассемблера, то вы, вероятно, знакомы с другой стороной медали архитектуры RISC – отсутствием инструкций. Например, нет соответствующей инструкции по умножению двух чисел.Конечно, есть способ решить эту проблему благодаря математике, которая позволяет выполнять сложные операции, разбивая их на ряд простых. Соответственно, умножение можно легко заменить последовательным сложением (a x b = a + a + a + … + a). И вот мы, только в начале очень длинной истории … Тем не менее, нет причин для беспокойства, если вы используете один из языков программирования высокого уровня, например, Basic, поскольку компилятор автоматически найдет решение этих и подобных проблем.Просто напишите a * b.

Как научиться программированию микропроцессоров

Самый простой и наиболее выгодный способ изучить программирование микрочипов – это работать с микроконтроллером. Микроконтроллер – это, по сути, компьютер на микросхеме с собственным процессором, оперативной памятью и контактами ввода / вывода. Некоторые микроконтроллеры имеют встроенные аналого-цифровые преобразователи. Существует множество типов микроконтроллеров, но самый простой способ начать – использовать плату Arduino. Arduino – это небольшая печатная плата, которая включает в себя микроконтроллер и все внешние схемы, необходимые для его программирования и запуска.С Arduino вы можете сразу приступить к изучению программирования.

Выберите микроконтроллер, который вы хотите изучить. Чипы Microchip PIC и Atmel AVR являются популярным выбором, как и плата Arduino. Большинство микроконтроллеров используют версию языка программирования C, но есть вариации. Каждый производитель также использует свой язык ассемблера. Ассемблерный код менее понятен, чем C, но более эффективен, поскольку он ближе к машинному языку чипа. Поскольку язык ассемблера очень компактен, а память на микроконтроллере ограничена, многие программы написаны на языке C и ассемблере.

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

Загрузите программное обеспечение для редактирования кода и компилятор для вашего чипа. «Компиляция» кода преобразует его из относительно ясного языка, на котором вы его написали, на язык, который может понять чип.Код микроконтроллера должен быть скомпилирован для этого конкретного чипа, поэтому загрузите компилятор у производителя микроконтроллера. Arduino использует собственный язык программирования, похожий на C, но более простой в освоении. Бесплатное программное обеспечение для редактирования и компиляции для Arduino доступно на его веб-сайте вместе с обширными руководствами.

Установите микроконтроллер на макетной плате. Следуйте инструкциям в техническом паспорте для внешних цепей, таких как источник питания. Разным микроконтроллерам для работы требуется разное количество напряжения и тока, поэтому вам нужна схема, которая будет правильно управлять источником питания.

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

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

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

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

Все о микроконтроллерах – код, схемы и конструкция

См. Также примечания Дэна О’Салливана о микроконтроллерах. Мои записи во многом основаны на записях Дэна.

Микроконтроллер – это небольшой недорогой компьютер, обычно используемый для считывания ввода из реального мира и управления устройствами на основе этого ввода. Большинство электронных устройств, которые вы используете сегодня, имеют микроконтроллер той или иной формы.Микроконтроллеры просты в использовании с простыми датчиками и устройствами вывода, и они также могут довольно просто взаимодействовать с настольными компьютерами. Когда вы создаете какую-либо форму настраиваемого датчика или устройства вывода, использование микроконтроллера – отличный способ отделить настраиваемую часть вашего проекта от той, которая лучше всего подходит для настольного компьютера. Они также очень полезны, когда вы разрабатываете простое интерактивное устройство, которое не требует полной мощности настольного компьютера, но должно быть меньше или дешевле.

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

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

Микроконтроллеры более высокого уровня будут иметь простой аппаратный интерфейс для других устройств (обычно вилку или пару проводов) и более простой язык программирования, если вообще будет. Они также обычно будут самыми дорогими из микроконтроллеров, потому что кто-то другой сделал эту работу за вас.Для работы контроллеры более высокого уровня должны быть подключены к персональному компьютеру через последовательный порт или USB. Для микроконтроллеров более низкого уровня потребуется больше работы, как с точки зрения аппаратных соединений (вам придется создавать свои собственные схемы, чтобы связывать их с другими устройствами) и с точки зрения программирования (вам нужно будет использовать язык программирования более низкого уровня, такой как C или ассемблер). Однако процессоры более низкого уровня, как правило, дешевле и гибче с точки зрения того, что вы можете заставить их делать.

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

Высокий уровень: Гейнер

контроллер гейнера

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

Язык программирования: ActionScript, Max / MSP, Processing. Сами модули предварительно запрограммированы и используют последовательный протокол с открытым исходным кодом. К ним можно обратиться через серию интерфейсов прикладного программирования (API) для разных языков программирования.

Аппаратный интерфейс: USB

Стоимость: Стартовые наборы варьируются от 130 долларов за базовый интерфейсный комплект до 530 долларов за заводские

Высокий уровень: Phidgets

Контроллер Phidget

Что это такое: серия интерфейсных модулей, которые позволяют пользователю подключать датчики, двигатели, освещение, MIDI-устройства и многое другое с минимальной работой электроники или без нее.

Язык программирования: C / C ++, Java, ActionScript и т. Д. Сами модули предварительно запрограммированы и используют собственный последовательный протокол USB. К ним можно обратиться через серию интерфейсов прикладного программирования (API) для разных языков программирования.

Аппаратный интерфейс: USB

Стоимость: Стартовые наборы варьируются от 130 долларов за базовый интерфейсный комплект до 530 долларов за заводские

Микроконтроллеры среднего уровня обычно программируются путем подключения последовательного кабеля от ПК, на котором написан код, к самому микроконтроллеру.Кроме того, дополнительное оборудование не требуется.

Разнообразные модули среднего уровня и микроконтроллеры низкого уровня.

Средний уровень: проводка и Arduino

Модуль Arduino

Что это: электронный модуль с микроконтроллером, блок питания, интерфейс USB-to-serial, контакты интерфейса ввода / вывода

Язык программирования: Wiring, более простой вариант языка C, очень похожий на Processing.

Аппаратный интерфейс: простой интерфейс цифровых и аналоговых цепей для контактов ввода / вывода.

Стоимость: Электромонтаж: 80,00 $. Arduino: 30 долларов США. Оба могут быть получены от Sparkfun в США.

Как и другие микроконтроллеры среднего уровня, Wiring и Arduino подключаются напрямую к компьютеру для программирования. Однако, в отличие от других, они имеют встроенный USB-последовательный интерфейс, поэтому они подключаются прямо к вашему USB-порту. Кроме того, дополнительное оборудование не требуется.

Программное и аппаратное обеспечение для Wiring и Arduno является открытым исходным кодом, планы доступны в Интернете.Так что, если вам нравится работать на низком уровне, вы можете использовать их как мост, чтобы добраться туда. Оба они основаны на микроконтроллерах семейства Atmel.

Существует несколько вариаций Arduino, некоторые из которых созданы исходной командой, а некоторые – другими производителями. Различный дизайн отражает множество различных вариантов применения или личные вкусы производителя. Список нескольких вариантов Arduino можно найти на сайте Arduino.

Средний уровень: модуль микроконтроллера NetMedia BX-24

Модуль BX-24

Что это: электронный модуль с микроконтроллером, блок питания, последовательный интерфейс, память, контакты интерфейса ввода / вывода

Язык программирования: BX BASIC, очень близок к Visual Basic.

Аппаратный интерфейс: простой интерфейс цифровых и аналоговых цепей для контактов ввода / вывода.

Стоимость: 50,00 $

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

Микроконтроллеры нижнего уровня обычно требуют внешнего аппаратного программатора для программирования. Обычно программатор подключается к ПК через последовательный, параллельный или USB-кабель, а микроконтроллер помещается в программатор для его перепрограммирования. У некоторых программистов есть кабели, позволяющие им подключаться к схеме, в которую встроен микроконтроллер, для его перепрограммирования. Это называется внутрисхемное программирование .

Низкий уровень: микроконтроллер AVR Atmel

Что это: Микросхема микроконтроллера

Язык программирования: Ассемблер, C, BASIC, Wiring

Аппаратный интерфейс : для работы требуется программатор для создания схемы питания и синхронизации; после этого схемы ввода / вывода аналогичны BX-24 и другим схемам среднего и низкого уровня.

Стоимость: 1–15 долларов в зависимости от модели.

Контроллеры Atmel – это контроллеры, лежащие в основе модулей Wiring, Arduino и BX-24.Â В семействе AVR есть множество контроллеров с различными функциями.  Некоторые из них имеют больше контактов ввода-вывода, некоторые имеют больше памяти, некоторые могут разговаривать по USB изначально и т. Д. Существует хороший компилятор C с открытым исходным кодом для Микросхемы AVR, AVR-GCC. Это основа для сред разработки Wiring и Arduino, доступная в Windows, OSX и Linux. Objective Development имеет хороший пакет AVR-GCC для пользователей OSX.

Низкий уровень: микроконтроллер Microchip PICMicro

Что это: Микросхема микроконтроллера

Язык программирования: Ассемблер, C, BASIC

Аппаратный интерфейс : для работы требуется программатор для создания схемы питания и синхронизации; после этого схемы ввода / вывода аналогичны BX-24 и другим схемам среднего и низкого уровня.

Стоимость: 1–15 долларов в зависимости от модели.

На что следует обратить внимание при выборе микроконтроллера:

Затраты

Сколько я хочу потратить? Чем выше уровень, тем выше стоимость. Но если это сократит время между настройкой и самовыражением, возможно, стоит потратить дополнительные деньги.

Время

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

Какие языки программирования / протоколы связи / электронику я уже знаю? При прочих равных выберите систему, о компонентах которой вы что-то знаете.

На что похожа база знаний? У большинства микроконтроллеров есть несколько веб-сайтов и списков, посвященных их использованию и программированию. Часто ссылки на лучшие из них размещаются прямо на сайте производителя или дистрибьютора.Ознакомьтесь с ними, посмотрите примеры кода и заметки по применению. Прочтите несколько обсуждений. Выполните несколько поисков в Интернете для среды микроконтроллера, которую вы рассматриваете. Есть ли много собранных знаний в той форме, которую вы понимаете? Это важный фактор, который следует учитывать. Иногда конкретный процессор может показаться лучшим в мире, но если никто, кроме вас, его не использует, вам будет намного сложнее научиться.

Расширяемость / совместимость

С какими еще компонентами совместим микроконтроллер? Можете ли вы добавить модули к своему микроконтроллеру? Например, совместимы ли с ним их контроллеры двигателей? Контроллеры дисплея? Датчики или сенсорные модули? Часто эти модули дороги, но они просто встают на место без каких-либо специальных схем.Если ваше время дорого стоит, то эти модули – хорошая покупка. Иногда, даже если вы знаете, как построить его с контроллером более низкого уровня, система более высокого уровня стоит своих затрат, поскольку экономит время на строительство и обслуживание.

К чему мне подключиться? Вы подключаетесь к MIDI-синтезатору? Плата освещения DMX-512? Настольный компьютер? Телефонная система? Интернет? Различные микроконтроллеры будут иметь разные возможности интерфейса. Убедитесь, что вы можете соединить все вместе.Иногда для этого требуются творческие комбинации контроллеров, если ни один контроллер не может разговаривать со всеми устройствами, с которыми вы хотите, чтобы он разговаривал.

Физические и электрические характеристики

Сколько входов / выходов мне нужно? Каждая система имеет определенное количество входов и выходов. Если можете, решите, сколько вещей вы хотите ощущать или контролировать, прежде чем выбирать контроллер.

Какие типы входов и выходов мне нужны? Вам нужны аналоговые входы и выходы для определения изменяющихся значений, или вам нужны только цифровые входы и выходы, чтобы определять, включено или выключено что-то?

Какая мощность мне доступна? Требуется ли питание от аккумулятора? Должно ли оно соответствовать напряжению другого устройства? Нужно ли потреблять очень мало тока?

Как быстро мне нужно обрабатывать данные? Процессоры более низкого уровня обычно обеспечивают большую скорость.

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

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

Экономика разработки микроконтроллеров

Один из первых вопросов, который обычно задают люди, когда узнают, что контроллеры низкого и среднего уровня могут выполнять многие из одинаковых вещей, – почему разница в стоимости? Почему BX-24 или Basic Stamp стоит 50 долларов и выше, а PIC или SX micro – менее 10 долларов? Кроме того, почему программное обеспечение для разработки контроллеров среднего уровня является бесплатным, а программное обеспечение для контроллеров низкого уровня – нет? Ответ, как и следовало ожидать, заключается в целях людей, которые их продают.

Компании, которые производят модули микроконтроллеров среднего уровня (NetMedia для BX-24, Parallax для Basic Stamp, Basic Micro для Basic Atomm) занимаются оборудованием. Они зарабатывают деньги, продавая вам модули. Обычно они обслуживают довольно небольшого количества клиентов, которые покупают иногда один, иногда дюжину, но редко более сотни модулей за раз. Чтобы этот клиент продолжал возвращаться, они также разрабатывают проприетарные среды разработки, чтобы вы не могли перепрограммировать их модули с помощью программного обеспечения другого парня.Однако, чтобы вы не расстраивались из-за этого, они раздают его бесплатно. Они убеждены, что уникальное сочетание микроконтроллера, вспомогательной схемы и среды разработки, которое они предлагают, является лучшим способом использования микроконтроллеров и стоит очень дорого. Для новичков они часто оказываются правы.

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

Инструменты среднего уровня с открытым исходным кодом являются многообещающими, потому что они объединяют лучшее из обоих миров. Они позволяют вам учиться на среднем или высоком уровне, а затем, когда вы знаете, что делаете, вы можете взять низкоуровневую внутренность устройства (контроллер Atmel в случае этих двух инструментов) и получить экономическую выгоду. рабочего низкого уровня.Подобные гибридные проекты с открытым исходным кодом постоянно появляются в сети. Некоторые из них были представлены на семинаре «Создание эскизов в оборудовании» в 2006 году, и ссылки на ресурсы были собраны в Интернете по этой ссылке, если вы хотите узнать больше.

С другой стороны, компании, производящие контроллеры низкого уровня (Microchip, Atmel, Ubicom), привыкли продавать их в очень больших объемах. Они продают контроллеры крупным производителям, которые используют их в автомобилях, игрушках, выключателях, микроволновых печах и многом другом.Их клиентам необходимо сократить все лишние расходы, чтобы получить прибыль от конечного продукта. Эти заказчики готовы обучать инженеров низкоуровневому программированию, разрабатывать собственные программные инструменты и т. Д., Чтобы получить недорогой чип большого объема. Фактически, процессоры низкого уровня – это сердце процессоров среднего уровня. Обратите внимание на большую фишку на Basic Stamp 2; это ПОС. Низкоуровневые производители не тратят много времени на создание сред разработки, поэтому они могут специализироваться на создании широкого спектра хороших микросхем.Фактически, они привыкли работать с такими большими объемами, что несколько фишек более или менее не имеют большого значения. Большинство из них даже предлагают ограниченное количество бесплатных образцов на своих веб-сайтах для потенциальных клиентов.

Так что, если вы новичок или маленький парень, который хочет использовать чипы низкого уровня? У вас, вероятно, нет времени или опыта, чтобы разработать для него собственный компилятор, и вам лучше не использовать язык ассемблера контроллера, если вы можете этого избежать. Вот тут-то и появляются сторонние разработчики программного обеспечения.Такие компании, как CCS, Microengineering Labs, Crownhilll, Hi-Tech и другие, создают и продают настраиваемые среды разработки более высокого уровня для контроллеров низкого уровня. Они занимаются программным бизнесом. Поскольку маржа прибыли от контроллеров низкого уровня уже настолько низка, они предпочитают не разрабатывать дополнительное оборудование для продажи вам оборудования премиум-класса, а вместо этого создают действительно хорошие программные инструменты, чтобы вам было легко программировать контроллеры низкого уровня. Многие из них также делают программаторов на заказ, что также упрощает работу с оборудованием.

Итак, что же это даст вам, любителю или новичку в микроконтроллерах? Что выбрать?

Использование микроконтроллеров среднего уровня обойдется вам относительно недорого с точки зрения периферийных устройств. Программное обеспечение бесплатное, а последовательный кабель стоит около 5 долларов. Различные компоненты, которые вам понадобятся для создания типичного проекта, обойдутся вам, возможно, от 50 до 75 долларов. Микроконтроллер обойдется вам еще в 50 долларов. Если вы разбираетесь в схеме и достаточно уверены, что не повредите свой микроконтроллер, это неплохой вариант.Вы всегда можете сохранить проект без изменений и повторно использовать микроконтроллер для других проектов. Вы сэкономите время, не узнавая, как работает аппаратный программист, какой компилятор выбрать или как его настроить. Для новичка, ищущего немедленного удовлетворения, средний уровень – это путь.

Единственным недостатком является то, что если вы хотите построить еще много проектов, вы каждый раз получаете эти 50 долларов сверх затрат на любой другой проект. А если вы повредите микроконтроллер, еще 50 долларов.И еще, и еще, пока вы не научитесь быть осторожными со своими схемами.

С другой стороны, использование низкоуровневых контроллеров вызывает больше затруднений. Вам нужно выбрать среду разработки и заплатить за нее, выбрать программиста аппаратного обеспечения и заплатить за него и научиться настраивать все необходимое. На приличный компилятор и приличного, но дешевого программиста вы, вероятно, выложите около 300 долларов. Вы потратите много времени на раннем этапе, проклиная и желая купить Basic Stamp 2 или BX-24.Преимущество приходит немного позже, когда все будет настроено и вы начнете создавать проекты. Во-первых, если вы зажарите чип, у вас будет всего несколько долларов на его замену. Чем дольше вы продолжаете создавать проекты микроконтроллеров, тем лучше. Вам не нужно тратить больше денег на среду разработки, а микросхемы дешевы. Если вы можете немного поработать ради удовольствия и вам предстоит долгая работа, это хороший способ.

Введение в обновление микроконтроллеров: язык программирования / среда разработки программного обеспечения

Введение в микроконтроллеры: 3 из 6

Как вы, наверное, уже знаете, эта серия «Введение в микроконтроллер» представляет некоторые из основных концепций, которые должен освоить каждый, кто хочет стать технологом встраиваемых систем.Эти концепции применимы как к аппаратной, так и к программной сторонам реализации системы.

В первых двух частях серии мы рассмотрели аппаратное обеспечение микроконтроллеров. На этот раз мы рассмотрим языки программирования и среду разработки программного обеспечения.

Машинный язык: единственный язык, понятный вашему процессору

ЦП микроконтроллера считывает программный код из памяти по одной инструкции за раз, декодирует каждую инструкцию и затем выполняет ее. Все содержимое памяти – как программный код, так и данные – находится в двоичной форме: строки из единиц и нулей.Инструкции – это двоичные коды, которые сообщают процессору, что делать; в то время как значения данных представляют собой двоичные (числовые) значения, которые ЦП складывает, вычитает, обрабатывает как значения адресов или иным образом работает или обрабатывает в соответствии с инструкциями.

В левой части рисунка 1 ниже показана команда машинного языка, которая загружает числовое значение 2 в регистр A. (Регистры – это места хранения, расположенные внутри ЦП.)

ЦП считывает эти коды команд из памяти.ЦП читает инструкции последовательно – из последовательных адресов памяти – если не указано на переход. Если мы предположим, что область памяти команд начинается, например, с адреса 0000, то после сброса ЦП сначала получит и выполнит инструкцию, хранящуюся по этому адресу. Затем он продолжит (если не указано иное) получать и выполнять инструкции с адресов 0001, 0002, 0003 и так далее. Другими словами, программа – это серия инструкций на машинном языке, описывающих последовательность операций, которые должны быть выполнены.

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

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

Инструкция на машинном языке

0 1 0 1 0 0 0 1
0 0 0 0 0 0 1 0

Язык ассемблера

МОВ А, №02

Рисунок 1. Представления на языке ассемблера и машинном языке для одной и той же операции

Хотя язык ассемблера явно более применим (для людей), чем машинный язык, он по-прежнему довольно многословен, не интуитивно понятен и с ним трудно работать.Другая проблема заключается в том, что реализация машинного языка отличается для каждого типа ЦП. Поскольку ассемблерный код тесно связан с машинным кодом, ассемблерным программистам потребуется переписывать свой код каждый раз при изменении типа ЦП (приведенный выше пример относится к микроконтроллеру семейства Renesas RL78). Эта потребность в постоянном переписывании серьезно снизила бы продуктивность программиста и снизила бы удовлетворенность работой.

Язык программирования C: лучший способ программирования

Использование языков программирования более высокого уровня, таких как C, решает эти проблемы.Программы, написанные на C, очень переносимы, так как они обычно могут работать на любом типе ЦП без изменений. Их также легче (для людей) писать и читать, поскольку они более компактны и используют гораздо более описательный набор английских слов и сокращений. На рис. 2 показана разница между кодом C и кодом сборки для одной и той же операции.

Рисунок 2: Идентичная операция, записанная на сборке и C

В то время как люди находят код C относительно простым для работы, процессоры не могут его понять.Поэтому возникает необходимость преобразовать код C (исходный код) в машинный код (объектный код), который ЦП может использовать. Это преобразование выполняется программой, называемой компилятором. Результирующий объектный код затем должен быть записан в соответствующие области памяти, чтобы обеспечить выполнение ЦП.

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

Отладчики: обнаружение и исправление ошибок

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

ДВС
Внутрисхемный эмулятор (ICE) – это специальный оценочный чип, который устанавливается вместо фактического MCU и используется для помощи в отладке кода, чтобы подготовить его к использованию с самим MCU.Обратите внимание, что «внутрисхемный эмулятор» является зарегистрированным товарным знаком Intel Corporation. ДВС Renesas называют «эмуляторами полной спецификации».
Эмулятор JTAG
Схема отладки встроена в сам MCU. Этот тип отладки дешевле, чем отладка ICE, поскольку отладку можно выполнять непосредственно на MCU. Реализации Renesas называются «встроенными эмуляторами отладки».
Монитор отладки
Отладочное программное обеспечение, которое работает на MCU вместе с отлаживаемой программой и взаимодействует с главным компьютером, на котором выполняется отладка.Поскольку MCU должен запускать монитор отладки в дополнение к целевой программе, функциональность более ограничена, а скорость выполнения ниже, чем с подходами ICE и JTAG. Однако преимущество состоит в том, что затраты также намного ниже.

Интегрированная среда разработки

Инженеры

обычно используют многочисленные программные инструменты при разработке программного обеспечения MCU, включая, помимо прочего, компиляторы, компоновщики и отладчики, описанные выше. Раньше каждый из этих инструментов предоставлялся как отдельная программа; а инженеры запускали инструменты по мере необходимости из командной строки или как пакетный процесс.Однако в последнее время инженеры могут вместо этого использовать интегрированную среду разработки (IDE): единый пакет, состоящий из полного набора инструментов, каждый из которых может запускаться из обычного Renesas CS +.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *