При разработке практически любого программного обеспечения для микроконтроллеров выясняется, что программа должно состоять из нескольких, сравнительно самостоятельных задач с возможностью коммуникации этих задач между собой.
Т.е. существует потребность в общей управляющей программе типа операционной системы.
mRTOS – общие сведения
mRTOS
(micro
Real-Time Operating System) является кооперативной ОС с
приоритетным планированием. Причинами
появления этой ОС таковы:
Малые и средние контроллеры AVR имеют небольшой объем внутреннего ОЗУ, поэтому вытесняющие (preemptive) ОС не подходят для этой цели, несмотря на их преимущества. Пожалуй, единственной, достойной альтернативой является кооперативная ОС с приоритетным планированием. Вообще для того, чтобы использовать преимущества вытесняющих (preemptive) ОС микроконтроллер должен иметь минимум 4 кБайт ОЗУ. Из-за исходной ориентации на мелкие МК применяются упрощенные и облегченные решения что, позволило добиться сравнительно неплохого результата. Контекст каждой задачи использует всего лишь 3 байта. Используется очень простой механизм планирования (и вычисления приоритетов). В качестве языка разработки ОС выбран язык программирования С версии CodeVisionAVR с ассемблерными вставками. Хотя существует возможность портирования данной ОС на другую платформу – WinAVR или ICCAVR. WinAVR к тому же и бесплатен. Вопрос портирования будет рассмотрен ниже. Еще одной из причин разработки данной ОС было то, что после длительных поисков и попыток портирования найденных ОС для компилятора CodeVisionAVR ни одна из них не увенчалась полным успехом. По мнению автора среда разработки CodeVisionAVR является самым удобным инструментом для разработки проектов небольшой и средней степени сложности. Т.е. для проектов, в которых как раз и используются малые и средние контроллеры AVR. Хотя проект средней сложности – это может быть и достаточно серьезный проект. Данная ОС используется в проекте, где существует сеть микроконтроллеров ATMega162, построенная на USART, контролирующая и управляющая 40 разнообразными внешними устройствами, синтезом звуковых сообщений и общей внешней FLASH памятью 20 Мбайт. С другой стороны данная ОС была использована в малом проекте на микроконтроллере AT90S2313 – в приложении инициировано 3 задачи (процесса). И в том и другом случае существенно легче стало обеспечивать модификацию, сопровождение и отладку программного обеспечения. Понятнее и прозрачнее стали тексты программ.
Внутренее устройство mRTOS
Рисунок 1
На рисунке 1 представлена блок-схема
mRTOS,
на которой можно увидеть что ОС
функционально состоит из 3-х программных
блоков.
Блок
приоритетного переключения задач – набор функций и
системных переменных, которые обеспечивают:
Блок
обработки системных событий - набор функций и
системных переменных, которые обеспечивают:
Блок
сервиса системного времени - набор функций и системных
переменных, которые обеспечивают:
Для применения mRTOS следует скопировать файлы mrtos.c и mrtos.h в папку проекта и включить файл mrtos.c в состав проекта приложения. В файле mrtos.h определить:
Определить задачи (процессы) приложения – описано в пункте “Задачи (процессы) в mRTOS”.
Далее следует настроить системный таймер, что подробно описано в пункте “Нулевой таймер микроконтроллера Timer0”.
Init_mRTOS();
create_task(task1,
10, Active);
create_task(task2,
50, Active);
create_task(task3,
30, Active);
Выше приведен пример инициализации 3-х задач в приложении. В действительности количество, приоритет и статус инициализируемых задач зависит только от программиста.
Sheduler();
Далее планирование и переключение задач будет происходить согласно алгоритму планировщика задач и зависеть от приоритета и статуса задач.
Эта ОС разрабатывалась для себя
и для всех желающих ее использовать. Любой,
изъявивший желание, может использовать и/или
распространять ее совершенно бесплатно как
в образовательных целях, так и в
некоммерческих и коммерческих проектах.
Единственное ограничение – копирайт, но
это у нас никому не мешает. mRTOS поставляется
«как есть» (“as is”), никаких гарантий,
естественно, не предоставляется.
В файле для загрузки помещены файлы mRTOS - mrtos.c и mrtos.h, а также файл документации в формате PDF и две папки с примерами для микроконтроллеров AT90S2313 и ATMega162 - mRTOS.rar.
Порт mRTOS - WinAVR
Спасибо Олегу Самоткову за его работу по портированию mRTOS для компилятора AVR GCC(WinAVR).
Ссылка для загрузки - mrtosGCC.zip
При проектировании mRTOS были изучены и переработаны материалы по ОС scmRTOS, FreeRTOS, csRTOS и был выработан собственный подход для достижения минимального использования ресурсов с сохранением необходимых функциональных возможностей.
Литература:
1. Иртегов Д.В. Введение в операционные системы. – СПб.: БХВ-
Петербург, 2002. – 624 с.: ил.
2. Столлингс В. Операционные системы, 4-е издание.: Перев. с англ. – М:
Издательский дом «Вильямс», 2002. – 848 с.: ил.
3. Гордеев А.В., Молчанов А. Ю. Системное программное обеспечение. –
СПб.: Питер, 2002. – 736 с.: ил.
4. Олифер Н.А., Олифер В.Г. Сетевые операционные системы. – СПб.:
Питер, 2001. – 544 с.: ил.
5. Таненбаум Э. Современные операционные системы. 2-е изд. – СПб.:
Питер, 2002. – 1040 с.: ил.
6. Операционные системы. Учебное пособие . Рощин Алексей Васильевич.
7. Алгоритмы планирования процессорного времени. И.С. Гусев.
8. Embedded Multitasking with small microcontrollers. Keith E. Curtis