Последние записи
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
25th
Фев
MrtOS. Мини-операционная система для MK Avr
Posted by Chas under Журнал, Статьи
При разработке практически любого программного обеспечения для микроконтроллеров выясняется, что программа должно состоять из нескольких, сравнительно самостоятельных задач с возможностью коммуникации этих задач между собой. То есть существует потребность в общей управляющей программе по типу мини-операционной системы…
Вячеслав Мовила
http://movila.site11.com
mRTOS. Общие сведения [1…8]
mRTOS (micro Real-Time Operating System) – является кооперативной ОС с приоритетным планированием. Причины появления этой ОС таковы:
- необходимость ОС для малых и средних контроллеров AVR. Большинство проектов автора используют именно такой тип микроконтроллеров;
- ОС для компилятора CodeVisionAVR.
Малые и средние контроллеры AVR имеют небольшой объем внутреннего ОЗУ, поэтому вытесняющие (preemptive) ОС не подходят для этой цели, несмотря на их преимущества. Пожалуй, единственной, достойной альтернативой является кооперативная ОС с приоритетным планированием. Вообще для того, чтобы использовать преимущества вытесняющих (preemptive) ОС микроконтроллер должен иметь минимум 4 кБайт ОЗУ. Из-за исходной ориентации на мелкие МК применяются упрощенные и облегченные решения что, позволило добиться сравнительно неплохого результата. Контекст каждой задачи использует всего лишь 3 байта. Используется очень простой механизм планирования (и вычисления приоритетов).
В качестве языка разработки ОС выбран язык программирования С версии CodeVisionAVR* с ассемблерными вставками. Хотя существует возможность портирования данной ОС на другую платформу – WinAVR или ICCAVR. WinAVR к тому же и бесплатен. Вопрос портирования будет рассмотрен ниже. Еще одной из причин разработки данной ОС было то, что после длительных поисков и попыток портирования найденных ОС для компилятора CodeVisionAVR ни одна из них не увенчалась полным успехом.
Данная ОС используется в проекте, где существует сеть микроконтроллеров ATMega162, построенная на USART, контролирующая и управляющая 40 разнообразными внешними устройствами, синтезом звуковых сообщений и общей внешней FLASH памятью 20 Мбайт. С другой стороны данная ОС была использована в малом проекте на микроконтроллере AT90S2313 – в приложении инициировано 3 задачи (процесса). И в том и другом случае существенно легче стало обеспечивать модификацию, сопровождение и отладку программного обеспечения. Понятнее и прозрачнее стали тексты программ.
Внутреннее устройство
На рисунке представлена блок-схема mRTOS, на которой можно увидеть, что ОС функционально состоит из 3-х программных блоков:
Рисунок. Блок-схема mRTOS
Блок приоритетного переключения задач – набор функций и системных переменных, которые обеспечивают:
- инициализацию задач (процессов) в системе;
- управление приоритетом задач (процессов) в системе;
- динамическое изменение статуса задачи (процесса);
- переключение задач (процессов), согласно текущим приоритетам.
Блок обработки системных событий – набор функций и системных переменных, которые обеспечивают:
- регистрацию системных событий;
- установку и очистку системных событий;
- получения состояния системного события.
Блок сервиса системного времени – набор функций и системных переменных, которые обеспечивают:
- подсчет тиков системного таймера;
- получение системного времени (времени работы ОС) в виде количества тиков системного таймера.
Применение mRTOS в приложениях
Для применения mRTOS следует скопировать файлы <mrtos.c> и <mrtos.h> в папку проекта и включить файл <mrtos.c> в состав проекта приложения. В файле <mrtos.h> определить:
- количество пользовательских задач (блоков TCB) в строке #define APPTASKS N,
где N – это количество задач определяемых в данном приложении; - количество событий (блоков ECB) в строке #define MAXEVENTS N,
где N – это количество событий определяемых в данном приложении.
Определить задачи (процессы) приложения – описано в пункте «Задачи (процессы) в mRTOS».
Далее следует настроить системный таймер, что подробно описано в пункте «Нулевой таймер микроконтроллера Timer0».
В функции main приложения следует инициализировать mRTOS:
Init_mRTOS();
Создать (зарегистрировать) задачи (процессы) в системе:
create_task(task1, 10, Active);
create_task(task2, 50, Active);
create_task(task3, 30, Active);
Выше приведен пример инициализации 3-х задач в приложении. В действительности, количество, приоритет и статус инициализируемых задач зависит только от программиста.
Передать управление планировщику задач:
Sheduler();
При первом вхождении в планировщик задач управление передается предопределенной в mRTOS (в файле <mrtos.c>) системной задаче «холостого хода» void idle(), которая имеет низкий приоритет и, по умолчанию, не выполняет никаких полезных действий. Но программист всегда может добавить в эту функцию какую-либо полезную работу.
Далее планирование и переключение задач будет происходить согласно алгоритму планировщика задач, и зависеть от приоритета и статуса задач.
Эта ОС разрабатывалась для себя и для всех желающих ее использовать. Любой, изъявивший желание, может использовать и/или распространять ее совершенно бесплатно как в образовательных целях, так и в некоммерческих и коммерческих проектах. Единственное ограничение – копирайт, но это у нас никому не мешает. mRTOS поставляется «как есть» (as is), никаких гарантий, естественно, не предоставляется.
Заключение
При проектировании mRTOS были изучены и переработаны материалы по ОС scmRTOS, FreeRTOS, csRTOS и был выработан собственный подход для достижения минимального использования ресурсов с сохранением необходимых функциональных возможностей.
В файле для загрузки помещены файлы mRTOS: <mrtos.c> и <mrtos.h>, а также файл документации в формате PDF и две папки с примерами для микроконтроллеров AT90S2313 и ATMega162 [9, 10] или непосредственно в архиве с журналом.
Спасибо Олегу Самоткову за его работу по портированию mRTOS для компилятора AVR GCC (WinAVR).
Ресурсы
- Иртегов Д.В. Введение в операционные системы. – СПб.: БХВ-Петербург, 2002. – 624 с.: ил.
- Столлингс В. Операционные системы, 4-е издание.: Перев. с англ. – М: Издательский дом «Вильямс», 2002. – 848 с.: ил.
- Гордеев А.В., Молчанов А. Ю. Системное программное обеспечение. – СПб.: Питер, 2002. – 736 с.: ил.
- Олифер Н.А., Олифер В.Г. Сетевые операционные системы. – СПб.: Питер, 2001. – 544 с.: ил.
- Таненбаум Э. Современные операционные системы. 2-е изд. – СПб.: Питер, 2002. – 1040 с.: ил.
- Операционные системы. Учебное пособие . Рощин Алексей Васильевич.
- Алгоритмы планирования процессорного времени. И.С. Гусев.
- Embedded Multitasking with small microcontrollers. Keith E. Curtis
- mRTOS порт CodeVision http://movila.site11.com/attachments/011_mRTOS.rar
- mRTOS порт WinAVR http://movila.site11.com/attachments/011_mrtosGCC.zip
Статья из девятого выпуска журнала «ПРОграммист».
Обсудить на форуме — MrtOS. Мини-операционная система для MK Avr
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)