Архитектура ARM и средства разработки
Все большее число производителей предлагают 32-разрядные микроконтроллеры на основе ядра ARM Cortex-M, и в то же время, имеются и новые среды разработки, предназначенные для таких микроконтроллеров. Некоторые языки программирования и инструменты, ранее доступные только для настольных компьютеров, в настоящее время портируются на ARM-микроконтроллеры.
Технические преимущества архитектуры ARM Cortex-M, такие как высокая производительность, высокая плотность кода, поддержка ОС и гибкость системы памяти, также позволяют использовать новые методы разработки программного обеспечения на ARM-устройствах. Использование этих методов с 16- или 8-разрядными микроконтроллерами может быть неэффективным или даже невозможным.
Открытость архитектуры ARM позволяет поставщикам программных сред разработки создавать среды для множества микроконтроллеров различных производителей, в то время как инструменты, разработанные для 8- и 16-разрядных устройств имеют ограниченный охват рынка.
Более широкая область внедрения также позволяет поставщикам программных инструментов создавать среды разработки приложений для определенных сегментов рынка встраиваемых решений, вроде M2M (межмашинное взаимодействие) и IoT (Интернет вещей), а также внедрять альтернативные языки программирования.
Технология Java
Технология Java ускоряет процесс разработки и прототипирования. Хотя существует несколько сред Java, здесь мы рассмотрим две.
Программирование с помощью программного комплекта разработки (SDK) Java ME (Micro Edition) идентично программированию с помощью Java SE (Standard Edition) Embedded (например, Eclipse/Netbeans IDE) за исключением того, что скомпилированный объект оптимизирован для встраиваемых систем, поддерживающих компактные носители, и библиотека графического пользовательского интерфейса или JavaFX не доступны на Java ME.
Например, если на микроконтроллере запущена Java ME Embedded, то Java-приложения могут быть сохранены на SD-карту или во внутреннюю память. При запуске системы Java ME Embedded может прочитать файл конфигурации и идентифицировать Java-приложение для последующей загрузки и выполнения.

Как правило, для хранения приложения и виртуальной Java-машины (JVM) требуется 256 КБ оперативной памяти и от 1 до 1.5 МБ ПЗУ. Стоит заметить, что приложения, запущенные на JVM, не гарантируют работу в реальном времени. Тем не менее, JVM может работать как один из потоков операционной системы реального времени (ОСРВ) параллельно с другими задачами реального времени, которые могут общаться друг с другом с помощью событийного механизма связи.
Java хорошо портируема: код может работать как на микроконтроллерах, так и на интернет-шлюзах, домашних серверах или больших серверах баз данных. Java ME и Java SE позволяют разрабатывать приложения, которые функционируют на различных встраиваемых платформах.
Для устройств IoT и M2M Java ME также предоставляет API протокола TCP/IP, что позволяет Java-приложениям открывать сокеты TCP/IP, общаться с другими устройствами и добавлять дополнительные стеки вроде Bluetooth. Дополнительные интерфейсы для клиент-серверного взаимодействия позволяют небольшим микроконтроллерным системам общаться с Oracle-серверами баз данных.
Изолированная среда Java может повысить безопасность, но может быть неудобна для задач управления. Java ME имеет периферийные API для облегчения этого процесса, но в отличие от традиционного программирования на C, эти API достаточно высокоуровниевые и, возможно, не в состоянии поддерживать некоторые специальные функции устройств. Некоторые задачи управления портами ввода/вывода могут быть разделены и работать как потоки наряду с JVM в ОСРВ.

Существует довольно много микроконтроллеров Cortex-M с несколькими сотнями килобайтов flash и оперативной памяти. Если вы хотите использовать на этих устройствах Java, то MicroEJ компании IS2T будет наиболее подходящим средством. Процесс разработки для MicroEJ оптимизирован под небольшие контроллеры, потому как Java-объекты сначала оптимизируются, проходят предварительную обработку и связываются друг с другом до загрузки в микроконтроллер вместо непосредственной загрузки кода в виртуальную машину.
MicroJvm загружается за 2 мс, работает при частоте ядра ARM Cortex-M3/M4 120 МГц и требует 28 КБ flash-памяти и 1 КБ оперативной памяти (не включая код приложения). Даже библиотеке человеко-машинного взаимодействия с графическим интерфейсом пользователя (GUI) нужно от 90 до 140 КБ flash-памяти.
MicroEJ SDK содержит опции Java Platform (JPF), включая корневые компоненты вроде MicroJvm и стандартные библиотеки, а также пакеты типа MicroUI (интерфейс пользователя), MWT (Micro Widget Toolkit, фреймворк виджетов), декодер изображений PNG и графические инструменты. Все эти компоненты позволяют разработчикам в короткие сроки создавать GUI, а объектно-ориентированный характер Java и автоматическое управление памятью предоставляют отличную платформу для работы с динамическими компонентами GUI.
Java-приложения могут обращаться к функциям библиотеки драйверов устройства через SNI (simple native interface, простой встроенный интерфейс) или Shield Plug.
MicroJvm может работать в качестве одной задачи в рамках какой-то операционной системы или функционировать сама по себе, поскольку в ней содержится свой собственный планировщик задач, называемый green thread (зеленый поток).
MicroEJ предоставляет среду разработки на базе Eclipse для создания Java-приложений на рабочем столе и симулятор, называемый SimJPF, который имеет функцию, позволяющую производить симуляцию с реальными линиями ввода/вывода. Также имеется инструмент Front Panel Designer для разработки виртуальных устройств.

Научные и математические приложения
В феврале 2013 года было объявлено, что программы, созданные в MATLAB и Simulink, будут поддерживаться микроконтроллерами с ядром ARM Cortex-M. Функция Embedded Coder позволяет генерировать код на C из проектов для MATLAB или Simulink, и для достижения лучшей производительности используется библиотека CMSIS-DSP.
Средства моделирования типа Simulink могут существенно сократить время разработки. Например, модель системы управления двигателем может быть создана и протестирована в Simulink. После проверки модели Embedded Coder может сгенерировать код на языке C, после этого можно проверить систему в «железе» с помощью конфигурации processor-in-the-loop (PIL), и в конечном итоге можно завершить проектирование, добавив необходимые строки кода для управления периферией. Поскольку код алгоритма управления генерируется автоматически, то ошибки, допущенные человеком, в данном случае исключаются.

LabVIEW
Пакет LabVIEW компании National Instruments также представляет собой графическую среду программирования, которая может работать с моделями. В отличие от большинства других инструментов модели полностью реализованы в виде диаграмм.
LabVIEW имеет библиотеку функций для цифровой обработки сигналов (фильтрация, спектральный анализ), математических расчетов, обработки массивов и матриц, и они позволяют разрабатывать приложение без глубоких знаний программирования или алгоритмов. Для сложных приложений программное обеспечение можно разбить на Virtual Instruments (VIs) и subVIs. Такое разделение на категории и подкатегории показано на рисунке ниже.

Генератор C-кода в пакете LabVIEW берет графический код и преобразует его в процедурный код на языке C, который затем может использоваться в традиционных средах программирования (Keil MDK-ARM, IAR Embedded Workbench). В процессе разработки код можно протестировать, запустив его в среде LabVIEW на ПК.
Перевод © digitrode.ru