Программирование AVR Femto OS: RTOS для маломощных MCU наподобие AVR Mon, September 27 2021  

Поделиться

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

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

Femto OS: RTOS для маломощных MCU наподобие AVR Печать
Добавил(а) microsin   

Femto OS весьма нетребовательная к ресурсам операционная система реального времени (ОСРВ, RTOS), которая предоставляет планировщик задач с вытеснением по приоритетам (preemptive) для микроконтроллеров, у которых ограниченный объем оперативной памяти (RAM) и памяти программ (FLASH). Например, Femto OS может работать на 128 .. 1024 байтах RAM и 2 .. 16 килобайтах FLASH. Основная целевая архитектура - Atmel AVR (в настоящее время уже Microchip), такие как ATtiny или младшие ATmega. Также возможна работа и на более продвинутых MCU (см. врезку далее). Система написана на C, для портирования применяется отдельный файл на языке ассемблера. В настоящий момент портирование реализовано для 44 типов микроконтроллеров AVR.

Типовой расход памяти программ может быть от 1 до 4 килобайт FLASH, в зависимости от необходимых функций RTOS, для типовых приложений часто бывает достаточно 2 килобайта. Система берет для себя от 10 до 20 байт RAM, задачи могут потреблять меньше 6 байт RAM, однако для реалистичных задач требуется примерно от 20 до 40 байт RAM под стек и локальные переменные задачи. К примеру, можно легко запустить 4 или большее количество задач на ATtiny261, без отдельной задачи ожидания (idle task). Большинство API-функций запускаются в пространстве OS. При необходимости в течение большого интервала процессорного времени работа OS может быть прервана. Есть инструменты для отслеживания использования стека задачами и его защиты от переполнения.

Код Femto OS отлично документирован и поставляется с примерами приложений (которые документированы по минимуму, но их код говорит сам за себя). Demo-приложения работают на всех MCU, для которых существует порт. Большинство демок работают из коробки на платах STK500/STK501/STK503, некоторые требуют дополнительного (очень простого) оборудования. Femto OS распространяется под лицензией GPLv3, однако существует коммерческая лицензия и техническая поддержка.

Кратко о возможностях Femto OS:

Максимальное количество задач:                             16
Максимальное количество приоритетов:                   8
Максимальное количество блокировок:                    15
Минимальный размер TCB(1) в стеке:                       2 байта
Минимальный размер стека задачи:                         4 байта
Минимальный размер стека OS:                               9 байт
Минимальное дополнительное использование RAM:  3 байта
Самое маленькое приложение:                                 258 байт

Примечание (1): аббревиатура TCB означает Task Control Block. Это память, необходимая для управления состоянием задачи.

Порты на микроконтроллеры Atmel (Microchip):

FemtoOS Chips ATmega128
ATmega1280
ATmega1281
ATmega1284P
ATmega162
ATmega164P
ATmega168
ATmega168P
ATmega16A
ATmega2560
ATmega2561
ATmega324P
ATmega325
ATmega3250
ATmega3250P
ATmega325P
ATmega328P
ATmega32A
ATmega48
ATmega48P
ATmega64
ATmega640
ATmega644
ATmega644P
ATmega645
ATmega6450
ATmega8
ATmega8515
ATmega8535
ATmega88
ATmega88P
ATtiny2313
ATtiny24
ATtiny25
ATtiny261
ATtiny43U
ATtiny44
ATtiny45
ATtiny461
ATtiny48
ATtiny84
ATtiny85
ATtiny861
ATtiny88

Типовая загрузка процессорного времени MCU со стороны кода OS:

Проверки включены, частота тиков 1 кГц, тактовая частота 8 МГц:        19%
Проверки выключены, частота тиков 1 кГц, тактовая частота 8 МГц:      9%
Проверки выключены, частота тиков 1 кГц, тактовая частота 16 МГц:    4%
Проверки выключены, частота тиков 100 Гц, тактовая частота 16 МГц:  < 1%

Femto OS специально создавалась под маломощные встраиваемые системы. Например, самое маленькое приложение для неё называется "Bare", оно скомпилировано для ATmega8. В нем запущен только 16-разрядный счетчик для светодиода на функции перехвата задачи ожидания (idle task hook), расходуется 258 байт FLASH и 10 байт RAM. Femto OS разрабатывалась для компиляции под управлением gcc, и генерируемый исполняемый код зависит от обработки препроцессора компилятора. По этой причине Femto OS привязана к вышеописанным ограничениям. Если требуется запустить больше 16 задач, или нужно больше примитивов синхронизации между задачами, то Вам нужно использовать другую OS, такую как FreeRTOS [2].

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

Самое важное в разработке - добиться максимальной стабильности в работе OS. У автора есть реализация версии 0.82 на ATtiny861, которая непрерывно, без сбоев работает с апреля 2008 года! Затем вероятно работа будет продолжена с IPv2, чтобы соединить друг с другом несколько AVR, и это может быть стек IP (Femto IP).

Демо-приложения Femto OS. Ниже в таблице приведен расход FLASH и RAM (в байтах) для нескольких демонстрационных приложений (включая расходы на OS), работающих на ATtiny861. Более подробную информацию по примерам см. на страничке "examples" сайта [1].

Приложение FLASH RAM задач Краткое описание
Bare 270 10 0 Счетчики со светодиодами в задаче ожидания idle task.
Minimal 590 29 2 Копирование состояния переключателей в светодиоды.
FlashLeds 1004 47 8 Независимое мигание восемью светодиодами.
Watchdog 1762 184 10 Сторожевой таймер перехватывает сбой в задаче.
Rendezvous 1366 210 9 Примеры синхронизации (обмена данными) между задачами.
Queues 1866 116 3 Перекачка данных через очередь.
Sleep 1242 76 3 Вход в режим пониженного потребления энергии (sleep) между миганиями светодиодом.
Hooks 794 35 1 Как использовать перехват системных событий (system hooks).
Interrupt 2466 264 4 Демонстрация различных режимов прерываний.
Shell 6874 373 10 8 светодиодами можно управлять из командной оболочки (консоль).
Passon 1914 293 10 Тест использования одновременных мьютексов.
Remember 2632 368 5 Стресс-тест файловой системы.
HelloWorld 960 48 2 Отображение Hello World в ASCII.

Имейте в виду, что для разных портов показанные выше расходы памяти могут незначительно отличаться. Обычно чем меньше MCU, тем получается меньше расход памяти. Кроме приложений Bare, Minimal и FlashLeds, показанные выше примеры не разрабатывались максимально нетребовательными к ресурсам. Обратите внимание, что приложение FlashLeds использует RAM по минимуму. TCB на 2 байта больше минимума из-за информации о задержке. Это приложение использует общий стек для всех задач, с минимальным размером 4 байт, т. е. 4 уходит на каждую задачу, 8 + 3 = 11 байт для OS, 4 байта для одного общего стека, итого получается 4x8 +11 + 4 = 47 байт.

Мотивация в разработке Femto OS. Работа над проектом Femto OS (который был изначально проектом "свободного времени") началась с августа 2007. Система целиком была написана с нуля. Источником вдохновения была FreeRTOS (это отличная система, но она слишком велика для MCU наподобие ATtiny), однако от неё Femto OS полностью отличается. Имя Femto OS означает, что OS действительно очень маленькая, значительно меньше чем pico]OS [5].

[Ссылки]

1. Femto OS: RTOS for small MCU's like AVR site:femtoos.org.
2. FreeRTOS: практическое применение, часть 1 (управление задачами).
3. Arduino FreeRTOS для устройств с питанием от батарей.
4. OS для Arduino: 5 хороших вариантов в 2021 году.
5. pico]OS site:picoos.sourceforge.net.
6. AttoOS site:attoos.soft112.com.

 

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


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

Top of Page