Расширьте возможности своей Arduino с помощью операционной системы! Ознакомьтесь с рекомендациями и вариантами операционных систем для Arduino.
Экосистема Arduino включает в себя аппаратное и программное обеспечение с открытым исходным кодом, разработанное и продаваемое итальянской компанией Arduino. Общая платформа содержит интегрированную среду разработки (IDE) под названием Arduino IDE, с помощью которой пользователи могут писать, компилировать и загружать код на плату разработчика (обычно оснащенную микроконтроллером Atmel AVR).
При обсуждении операционных систем (OS) для Arduino часто встречается термин «real time». По сути, операционная система реального времени (RTOS) разрабатывается с учетом временных гарантий (успеть сделать всё, что нужно в данный момент).
Для соблюдения этих гарантий существует два типа планирования, используемых OS для переключения между задачами: кооперативная многозадачность и вытесняющая многозадачность. Кооперативная OS требует специальных вызовов функций для переключения контекста, обычно в специально реализованных функциях сна, а вытесняющая ОС обычно имеет прерывания по таймеру, которые могут переключить контекст выполняемой задачи в любой момент времени.
В этой статье мы собрали лучшие варианты OS для Arduino, чтобы помочь вам определить, какая из них соответствует вашим потребностям. Но сначала давайте рассмотрим, на что следует обратить внимание при выборе.
Рекомендации

Прежде всего, необходимо решить, какая ОС лучше — вытесняющая или кооперативная. Как и во всем, в жизни всегда есть компромиссные решения.
Вытесняющие ОС хороши тем, что они всегда будут справедливы при планировании времени. Это означает, что если вы хотите, чтобы поток выполнялся каждые 10 мс, то в нормальных условиях ОС должна быть способна гарантировать это. Однако использование вытесняющей ОС также означает усложнение кода, поскольку для разделения ресурсов необходимо использовать блокировки.
Кооперативные ОС более просты по своей природе, поскольку они осуществляют контекстное переключение только при определенных вызовах, таких как методы delay или sleep. Однако это делает их изначально несправедливыми при определении приоритетов задач, поскольку если в задаче есть цикл while, который никогда не завершается, то другие задачи никогда не будут выполняться.
Помимо вытесняющего или кооперативного, есть еще несколько основных факторов, которые мы учитывали при составлении этого списка:
- Большой выбор поддерживаемых плат: Для того чтобы ОС была полезной, она должна быть совместима с вашей платой: Какие микроконтроллеры из экосистемы Arduino поддерживаются?
- Исчерпывающая документация: Насколько подробна документация и есть ли примеры, помогающие новичкам начать работу?
- Поддержка: Как правило, чем популярнее исходный код, тем больше шансов получить поддержку на каком-либо форуме. Существует ли развитое сообщество вокруг данной ОС?
FreeRTOS

FreeRTOS — это очень популярная RTOS с открытым исходным кодом, которая поддерживает вытесняющую или кооперативную многозадачность, в зависимости от того, как она настроена. Она поддерживает широкий спектр микроконтроллеров семейства Arduino, таких как ATmega328, ATmega32u4, ATmega1284p и ATmega2560.
Популярность FreeRTOS означает, что получить поддержку и найти примеры будет очень просто, а уровень доступной документации превосходен. FreeRTOS также предлагает множество дополнительных возможностей, таких как динамическое управление памятью, взаимодействие между задачами (очереди) и другие полезные примитивы.
- Тип многозадачности: Вытесняющая или кооперативная
- Уровень документации: Отличный
- Поддерживаемые платы: Более 40 архитектур, включая AVR (Arduino Uno, Nano, Leonardo и Mega).
- Популярность: Высокая
- Где скачать: GitHub, FreeRTOS
Zephyr

Zephyr — это проект с открытым исходным кодом, разработанный Linux Foundation. Он представляет собой масштабируемую модульную RTOS с мало занимаемым местом и низким энергопотреблением, которая может использовать как кооперативную, так и вытесняющую многозадачность. Набор предлагаемых инструментов безупречен, а активное развитие и вклад в проект обещают грядущие улучшения.
Будучи одной из популярных операционных систем для микроконтроллеров, она имеет активное сообщество и легкодоступную техническую поддержку. Кроме того, на самом сайте можно найти подробную документацию и примеры, которые помогут вам в работе. Список поддерживаемых плат насчитывает более 450 наименований, включая такие популярные архитектуры, как ARM, ARM64, SAMD и Esp32.
- Тип многозадачности: Вытесняющая или кооперативная
- Уровень документации: Отличный
- Поддерживаемые платы: Широкий спектр поддерживаемых микроконтроллеров, включая ARM (Arduino Due и Zero)
- Популярность: Высокая
- Где скачать: GitHub, Zephyr
NuttX

Похожая на Simba, Apache NuttX представляет собой встраиваемую RTOS, соответствующую стандартам POSIX и ANSI. Разработчики делают упор на соответствие стандартам и малую занимаемую площадь, что особенно удобно для глубоко встраиваемых сред. ОС масштабируется от микроконтроллеров с архитектурой от 8 до 64 бит.
Следует отметить широкую поддержку USB, Ethernet, Wi-Fi, 6LoWPAN, графических ЖК-дисплеев, SD Card, файловых систем FAT (File Allocation Table), шины CAN, RS485 и т.д., встроенных в ОС. Благодаря наличию подробной документации и активной поддержки освоение ОС может оказаться более легкой задачей, чем у других.
- Тип многозадачности: Вытесняющая или кооперативная
- Уровень документации: Отличный
- Поддерживаемые платы: Широкий спектр поддерживаемых микроконтроллеров, включая ARM и AVR
- Популярность: Высокая
- Где скачать: GitHub, NuttX
Riot

Разработанный специально для устройств IoT (Internet of Things), но со временем получивший широкую поддержку и развитие, Riot представляет собой бесплатный планировщик с открытым исходным кодом на основе приоритетов и поддержкой многопоточности. При его разработке особое внимание уделялось удобству использования, безопасности, связности и качеству кода.
Riot поддерживает большинство маломощных IoT-устройств, микроконтроллерные архитектуры (32-, 16-, 8-битные) и внешние устройства. Это популярный инструмент, поэтому вы можете легко найти обучающие материалы на Hackster и YouTube, а также принять участие в активном форуме сообщества.
- Тип многозадачности: Вытесняющая
- Уровень документации: Отличный
- Поддерживаемые платы: Широкий спектр поддерживаемых микроконтроллеров, включая большинство основных плат Arduino
- Популярность: Высокая
- Где скачать: GitHub, Riot
HeliOS

HeliOS — это ОС с кооперативным планированием, созданная с учетом простоты использования. Благодаря использованию кооперативного планирования, HeliOS должна быть проще некоторых других ОС в написании безопасного кода.
HeliOS поддерживает микроконтроллеры на базе AVR, ARM и SAMD. Она находится в стадии активной разработки, но может похвастаться некоторыми дополнительными функциями, присутствующими во FreeRTOS, такими как управление памятью, обмен сообщениями между задачами (очереди) и таймеры.
- Тип многозадачности: Кооперативная
- Уровень документации: Хороший
- Поддерживаемые платы: Широкий спектр микроконтроллеров, включая ARM, AVR и SAMD
- Популярность: Средняя
- Где скачать: GitHub
Simba

Simba — это платформа для встраиваемого программирования, что выгодно отличает ее от других вариантов в этой статье, поскольку она поддерживает не только управление задачами. Уровень документации превосходен, как и количество поддерживаемых плат.
Simba также может похвастаться поддержкой драйверов устройств для распространенных периферийных устройств, таких как SPI и I2C, а также файловых систем, сетей и протоколирования. Кроме того, в зависимости от конфигурации, Simba поддерживает кооперативные или вытесняющие потоки. Судя по GitHub, Simba очень популярна, а значит, получить поддержку будет проще.
- Тип многозадачности: Вытесняющая или кооперативная
- Уровень документации: Отличный
- Поддерживаемые платы: Большинство основных Arduino, а также большой список других плат.
- Популярность: Средняя
- Где скачать: GitHub, Simba
TaskManagerIO

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

CoopThreads — это кооперативный планировщик, который был разработан для облегчения работы на 8-битных микроконтроллерах (в отличие от полноценной RTOS). Она поддерживает широкий спектр Arduinos, включая микроконтроллеры на базе AVR, Esp32 и Esp8266.
Хотя по сравнению с другими ОС в библиотеке мало документации, в ней есть несколько примеров, которые должны помочь пользователям освоить CoopThreads.
- Тип многозадачности: Кооперативная
- Уровень документации: Ограниченный, но есть хорошие примеры
- Поддерживаемые платформы: Широкий спектр, включая микроконтроллеры AVR, Esp32 и Esp8266.
- Популярность: Низкая
- Где скачать: GitHub







