Программирование AVR OS для Arduino: 5 хороших вариантов в 2021 году Fri, April 19 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

OS для Arduino: 5 хороших вариантов в 2021 году Печать
Добавил(а) microsin   

Экосистема Arduino представляет собой открытое железо и ПО (open-source hardware/software), разработанное и успешно продаваемое одноименной итальянской компанией. Платформа состоит из системы разработки Arduino IDE, которые позволяют писать, компилировать и записывать/запускать код на широком спектре микроконтроллеров и плат разработчика. Изначально эти платы работали на MCU семейства Atmel AVR, но сейчас есть и другие, более мощные альтернативы (Cortex ARM, STM32, ESP и т. д.).

Термин, часто встречающийся при обсуждении операционных систем (OS) для Arduino - реальное время (real time). Соответственно операционные системы реального времени (real-time operating system, RTOS) были разработаны таким образом, чтобы гарантировать соблюдение определенных параметров в контексте реального времени.

Для удовлетворения этих требований существует 2 метода переключения между задачами RTOS: алгоритм кооперативной многозадачности (cooperative multitask) и алгоритм вытесняющей многозадачности (preemptive multitask). Кооперативные OS требуют вызова специальных функций для переключения контекста, обычно это специально реализованные функции засыпания (sleep), в то время как OS с вытеснением задач содержат в себе обработчик прерывания для планировщика, запускаемый по таймеру в строго заданные интервалы времени (тики). Это позволяет при необходимости, в соответствии с настроенными приоритетами, выполнять переключение контекста выполнения кода (передавать управление выполнением кода между разными задачами).

Примечание: более подробно и понятно про реальное время, принципы работы RTOS и терминологию см. статью [2].

Достоинства и недостатки cooperative и preemptive. Как и во всем в нашей жизни, при разработке всегда есть компромисс в выборе между вариантами разработки. Preemptive OS хороши тем, что они всегда будут точно соблюдать по времени созданные правила по запуску задач. Это значит, что если Вы хотите, чтобы задача запускалась строго с интервалами 10 мс, то в нормальных условиях (если нет ошибок и проблем) OS должна гарантировать, что это обязательно будет так. Однако разработка приложений на preemptive OS также означает более сложный код, поскольку необходимо применять средства синхронизации (блокировки, очереди, семафоры, мьютексы и т. п.) для использования общих ресурсов и передачи данных между задачами.

Cooperative OS проще по своей природе, потому что переключение контекста они осуществляют только с помощью вызова специальных функций внутри задачи (таких как delay или sleep). Таким способом задачи уступают свое процессорное время другим задачам. Однако соблюдение приоритетов получается несправедливым - к примеру, если у Вас есть долгий по времени выполнения (или бесконечный) цикл в одной задаче, то другие задачи во время работы этого цикла не смогут запуститься.

В этой статье (перевод источника [1]) приведен краткий обзор пяти операционных систем для Arduino, включая типы используемого планировщика, как они документированы, и какими платами Arduino поддерживаются.

Arduino boards

Операционные системы характеризуются многими свойствами, но здесь сделан акцент только на основных:

• Широкий диапазон поддерживаемых платформ: используемая Вами операционная система изначально должна поддерживать применяемую плату. Необходимо ответить для себя на вопрос - какие из микроконтроллеров экосистемы Arduino поддерживаются?
• Документация: насколько подробно описание, есть ли примеры, с которых можно быстро начать работу?
• Поддержка со стороны сообщества пользователей: у более популярной OS больше шансов найти подсказку или помощь где-нибудь на форуме.

[CoopThreads]

У операционной системы CoopThreads [3] применяется cooperative планировщик, разработанный максимально облегченным, чтобы он мог работать на 8-разрядных MCU (в отличие от полноценных RTOS). CoopThreads поддерживает широкий спектр плат Arduino, включая основанные на микроконтроллерах AVR, ESP32 и ESP8266.

Хотя библиотека CoopThreads довольно слабо документирована в отличие от других OS, в ней есть несколько примеров, которые помогут разобраться в применении CoopThreads.

Тип многозадачности: cooperative.
Документация: ограниченная, но есть хорошие примеры использования.
Поддерживаемые платформы: широкий диапазон MCU, включая AVR, ESP32 и ESP8266.
Популярность: низкая.
Где найти исходный код: GitHub [3].

[FreeRTOS]

Это очень популярная RTOS с открытым исходным кодом, которая поддерживает (по выбору в конфигурации) многозадачность preemptive или cooperative. Поддерживается множество MCU, таких как ATmega328, ATmega32u4, ATmega1284p и ATmega2560, применяемых в платах Arduino.

Популярность FreeRTOS означает, что можно легко найти помощь и примеры использования, уровень документирования API отличный. FreeRTOS также предоставляет множество дополнительных функций, таких как управление динамическим выделением памяти для объектов, обмен информацией между задачами (очереди queue), и другие полезные примитивы RTOS.

Тип многозадачности: preemptive или cooperative (настраивается в конфигурации).
Документация: отличная.
Поддерживаемые платформы: свыше 40 архитектур, включая AVR (Arduino Uno, Nano, Leonardo и Mega). Также поддерживаются платформы MCU, которых нет у Arduino.
Популярность: высокая.
Где найти исходный код: GitHub [4], FreeRTOS [5].

[HeliOS]

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

HeliOS поддерживает MCU платформ AVR, ARM и SAMD. Она все еще в активной разработке, но уже может похвастаться дополнительными функциями, которые есть в FreeRTOS - управление памятью, обмен сообщениями между задачами (queue) и таймеры.

Тип многозадачности: cooperative.
Документация: кое-что есть.
Поддерживаемые платформы: широкий диапазон платформ MCU.
Популярность: средняя.
Где найти исходный код: GitHub [6].

[Simba]

Simba это платформа программирования встраиваемых (embedded) устройств, которая стоит несколько в стороне от других, показанных здесь вариантов выбора RTOS, потому что предоставляет не только многозадачную среду выполнения кода. Уровень проработки документации высокий, поддерживается множество платформ MCU.

Simba предоставляет поддержку драйверов устройств для популярных аппаратных интерфейсов, таких как SPI и I2C. Также поддерживаются файловые системы, работа с сетевыми протоколами и формирование лога. Можно использовать либо cooperative, либо preemptive потоки, в зависимости от конфигурации. GitHub для Simba показывает очень высокую популярность, что означает довольно простое получение помощи.

Тип многозадачности: preemptive или cooperative (настраивается в конфигурации).
Документация: отличная.
Поддерживаемые платформы: многие основные платы Arduino, плюс широкий диапазон других плат.
Популярность: высокая.
Где найти исходный код: GitHub [7], Simba [8].

[TaskManagerIO]

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

Документация разносторонняя, и тот факт, что применяется cooperative-планировщик, обеспечивает простоту использования системы для начинающих и позволяет писать безопасный код без использования блокировок. Библиотека TaskManagerIO довольно популярна на Github, на возникающие проблемы разработчик отвечает быстро.

Тип многозадачности: cooperative.
Документация: отличная.
Поддерживаемые платформы: объявлена совместимость с широким диапазоном плат и операционных систем.
Популярность: высокая.
Где найти исходный код: GitHub [9].

[Ссылки]

1. Arduino Operating System: 5 Great Options in 2021 site:all3dp.com.
2. FreeRTOS: практическое применение, часть 1 (управление задачами).
3. pstolarz / CoopThreads site:github.com.
4. feilipu / Arduino_FreeRTOS_Library site:github.com.
5. FreeRTOS™ Real-time operating system for microcontrollers site:freertos.org.
6. MannyPeterson / HeliOS site:github.com.
7. eerimoq / simba site:github.com.
8. Welcome to Simba’s documentation! site:simba-os.readthedocs.io.
9. davetcc / TaskManagerIO site:github.com.
10. 210220Arduino-Operating-System.zip - исходный код операционных систем.
11Femto OS: RTOS для маломощных MCU наподобие AVR.

 

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


Защитный код
Обновить

Top of Page