Планировщик на ардуино

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

Используем FreeRTOS и ее многозадачность на Arduino

Операционная система реального времени FreeRTOS – это простая, легкая в использовании, надежная ОС, оптимизированная для Arduino IDE. В этом проекте мы покажем, как обеспечить доступ к возможностям FreeRTOS в классической среде Arduino.

В среде Arduino IDE и среде доступно множество драйверов и библиотек, но среда Arduino ограничена простыми базовыми функциями setup() и loop() и не поддерживает эффективную многозадачность. Но есть простая, простая в использовании и надежная реализация FreeRTOS, которая может просто интегрироваться в Arduino IDE в качестве библиотеки и позволяет без проблем использовать лучшие части обеих сред.

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

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

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

Итак, приступим к установке FreeRTOS на Arduino. Во-первых, в менеджере библиотек Arduino IDE, начиная с версии 1.6.8, найдите библиотеку FreeRTOS в типе Contributed и теме Timing.

Убедитесь, что установлена последняя версия библиотеки FreeRTOS.

Затем в меню Sketch-Include Library (Скетч – Подключить библиотеку) убедитесь, что библиотека FreeRTOS включена в ваш скетч. Новый пустой скетч будет выглядеть следующим образом.

Скомпилируйте и загрузите этот пустой скетч в Arduino Uno / Yun / Leonardo / Mega или Goldilocks 1284p. При этом будет показано, сколько вашей флэш-памяти используется планировщиком FreeRTOS. На этом этапе FreeRTOS уже работает на вашем устройстве.

Теперь загрузите и протестируйте скетч Blink с установленной операционной системой реального времени, просто вставив в начале скетча

Вот и все, что нужно сделать, чтобы FreeRTOS работала в ваших скетчах.

Следующим шагом является изучение функций, предоставляемых профессиональной ОСРВ в Arduino IDE. Скетч Blink_AnalogRead.ino – хороший способ начать, поскольку он объединяет два основных примера Arduino, Blink и AnalogRead, в один скетч с двумя отдельными задачами. Обе задачи выполняют свои обязанности под управлением планировщика FreeRTOS. Этот скетч можно найти в папке примеров в Arduino IDE, если его нет, то код можно взять ниже.

В следующей статье будет рассказано об использовании семафоров для защиты аппаратных ресурсов (например, последовательного порта). Если вас интересуют приложения с низким энергопотреблением, то FreeRTOS легко использовать для поддержки режимов пониженного энергопотребления в микроконтроллерах AVR ATmega.

Источник

Планировщик на ардуино

Операционная система реального времени (ОСРВ) FreeRTOS получила порт, оптимизированный под среду разработки Arduino IDE. В это трудно поверить, но разработчики обещают полный доступ ко всем возможностям FreeRTOS в классическом рабочем окружении Arduino.

Уже довольно давно Arduino IDE получила драйверы и библиотеки, позволяющие писать программы для довольно мощных процессоров ARM (не только для AVR). Однако стандартное приложение Arduino было ограничено простыми примитивами функций setup (первоначальная настройка) и loop (бесконечный цикл выполняющегося алгоритма), что не давало способа эффективно реализовать многозадачность.

В этой статье (перевод [1]) дан краткий обзор простой и удобной реализации FreeRTOS, которая достаточно компактна, чтобы работать в среде Arduino IDE как её библиотека, и позволить пользователям прозрачно использовать как функции Arduino, так и FreeRTOS. Все непонятные термины, касающиеся систем RTOS, см. в статье [10] (раздел «Словарик» в конце этой статьи).

[Немного теории]

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

Планировщик в Операционной Системе Реального Времени (ОСРВ; соответствующий английский термин Real Time Operating System, RTOS) разработан так, чтобы изначально предсказуемо распределить процессорное время между задачами, со строго определенным временем реакции всей системы на внешние события [2]. Обычно такое свойство описывают как детерминистский механизм поведения (deterministic execution pattern). В частности это свойство затребовано и в малых встраиваемых системах, таких как устройства Arduino, поскольку к таким устройствам предъявляются требования обработки алгоритмов в реальном времени.

Традиционные планировщики реального времени (real time scheduler), такие как шедулер FreeRTOS, реализуют свой детерминизм, назначая определенный приоритет каждому выполняемому потоку. Тогда шедулер использует этот приоритет, чтобы узнать, какому потоку в какой момент времени следует передать процессорное время (т. е. какой поток и когда должен продолжить выполнять свой алгоритм). В системе FreeRTOS выполняемый поток обозначается термином Task (задача).

[Быстрый старт]

Проще всего начать с использования Codebender [3], где Arduino FreeRTOS доступна как библиотека [4].

Другой способ, процесс по шагам:

1. Откройте менеджер библиотек Arduino IDE (Arduino IDE Library, доступный с версии Arduino 1.6.8), найдите в списке FreeRTOS Library (тип библиотеки Type: «Contributed» и тема Topic: «Timing»).

2. Убедитесь, что установлена самая свежая версия FreeRTOS Library Release. На момент написания статьи [1] это была версия v9.0.0-1.

3. Убедитесь с помощью меню Sketch -> Include Library, что библиотека FreeRTOS подключена к Вашему скетчу. Новый, пустой скетч будет выглядеть примерно так:

4. Скомпилируйте (Compile) и выгрузите (Upload) этот пустой скетч в свою плату Arduino (Arduino Uno, Arduino Yun, Arduino Leonardo, Arduino Mega 2560, Goldilocks 1284p и т. п.). Это покажет Вам, сколько памяти процессора Arduino уйдет на шедулер FreeRTOS. Ниже для примера приведена информация по использованию памяти на разных платах (код был скомпилирован под управлением Arduino v1.6.9 на Windows 10).

На этом шаге FreeRTOS уже работает на Вашем устройстве Arduino.

[Что дальше?]

Теперь выгрузите в плату и протестируйте скетч Blink с нижележащей RTOS путем вставки #include в начало скетча. Это все, что нужно для запуска FreeRTOS в Ваших скетчах.

Следующий шаг — рассмотреть возможности профессиональной RTOS в среде Arduino IDE.

Скетч Blink_AnalogRead.ino (см. врезку ниже) это хороший способ начать комбинировать в одном скетче базовые примеры Arduino, такие как Blink и AnalogRead, с распределением их функционала на разные задачи (Tasks). Обе эти задачи будут выполнять свои функции, под управлением шедулера FreeRTOS. Этот скетч можно найти в папке Examples каталога установки Arduino IDE.

В этом примере два базовых скетча из встроенных в Arduino IDE примеров (Examples) скомбинированы в один многозадачный скетч, в котором работают 2 задачи FreeRTOS.

Если Вас интересуют приложения с низким энергопотреблением или с питанием от батарей, то можно просто использовать FreeRTOS для поддержки режимов пониженного энергопотребления микроконтроллеров AVR ATmegaXXXX (AVR ATmega power reduction modes). Подробнее см. [5].

Другие статьи рассматривают использование семафоров (Semaphore) для защиты аппаратных ресурсов [6] (наподобие последовательного порта Serial), очередей (Queue) для обмена данными между задачами (Tasks), или таймеров (Timer), чтобы генерировать задержки и отслеживать таймауты. Страничка с руководством для быстрого освоения FreeRTOS [7] даст Вам дополнительную информацию по продвинутым функциям, и предоставит демонстрационные примеры [8]. Также есть много примеров кода AVR FreeRTOS на сайте GitHub, которые могут быть легко портированы в среду разработки Arduino.

Источник

Scheduler

Allows multiple tasks to run at the same time, without interrupting each other. For Arduino sam and samd architectures only (Due, Zero. ).
The Scheduler library enables the Arduino to run multiple functions at the same time. This allows tasks to happen without interrupting each other.This is a cooperative scheduler in that the CPU switches from one task to another. The library includes methods for passing control between tasks.

Compatibility

This library is compatible with the sam, samd architectures so you should be able to use it on the following Arduino boards:

Compatibility Note

Note: while the library is supposed to compile correctly on these architectures, it might require specific hardware features that may be available only on some boards.

Releases

To use this library, open the Library Manager in the Arduino IDE and install it from there.

Usage

The Scheduler library enables an Arduino based on SAM and SAMD architectures (i.e Zero, MKRZero, MKR1000, Due boards) to run multiple functions at the same time. This allows tasks to happen without interrupting each other. This is a cooperative scheduler in that the CPU switches from one task to another. The library includes methods for passing control between tasks.

To use this library:

Notes and warnings

The Scheduler library and associated functions are experimental. While it is not likely the API will change in future releases, it is still under development.

Источник

Использование мультизадачности FreeRTOS на Arduino

О проекте

В Arduino IDE имеется множество доступных драйверов и библиотек, но среда Arduino ограничена только setup() и loop() и эффективно не поддерживает многозадачность.

Рассмотрим простую, легкую в использовании и надежную реализацию FreeRTOS, которую можно вставить в Arduino IDE в виде библиотеки, и которая позволяет беспрепятственно использовать лучшие части обоих сред.

Использование мультизадачности FreeRTOS в Arduino

Происхождение

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

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

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

Давайте начнем

Во-первых, в менеджере библиотек Arduino IDE, начиная с версии 1.6.8, найдите библиотеку FreeRTOS под типом «Contributed» («Внесены») и темой «Timing» («Расчет времени»).

Поиск в менеджере библиотек Arduino

Убедитесь, что установлен последний релиз библиотеке FreeRTOS. В данном случае это v10.1.0-1.

FreeRTOS v8.2.3 Release 6 истановлена

Затем подключите библиотеку FreeRTOS либо через меню Скетч → Подключить библиотеку, либо добавьте следующую строку в начале скетча:

Скомпилируйте и загрузите этот пустой скетч (с FreeRTOS) на устройство Arduino Uno/Yun/Leonardo/Mega. Это покажет вам, сколько флэш памяти потребляется планировщиком FreeRTOS. При тестировании с Arduino IDE v1.6.9 на Windows 10 было получено следующее:

Размер флэш-памяти, занимаемой FreeRTOS на разных платах Arduino

Устройство Пустой скетч только с loop() Пустой скетч с FreeRTOS Дополнительный занимаемый объем памяти программ
Uno 444 7018 20%
Goldilocks 502 7086 5%
Leonardo 3618 10166 23%
Yun 3612 10160 23%
Mega 656 7086 2%

На этом этапе FreeRTOS уже запущена на вашем устройстве.

Следующие шаги

Теперь загрузите и протестируйте скетч Blink , используя операционную систему реального времени, просто вставив #include в начало скетча. Это всё, что нужно, чтобы FreeRTOS работала в ваших скетчах.

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

Blink_AnalogRead.ino – это хороший способ начать, поскольку он объединяет два базовых примера Arduino, Blink и AnalogRead , в один скетч с двумя отдельными задачами Task . Обе задачи выполняют свою работу, управляемые планировщиком FreeRTOS. Данный скетч может быть найден через меню Файл → Примеры → FreeRTOS.

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

Следующие статьи буду посвящены использованию семафоров ( Semaphore ) для защиты аппаратных ресурсов (например, последовательного порта), очередей ( Queue ) для передачи данных между задачами ( Task ) или таймеров ( Timer ) для управления точными задержками и таймаутами.

Источник

Adblock
detector