ОПЕРАЦИОННЫЕ СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ И BARE-METAL ПРОГРАММИРОВАНИЕ

Опубликовано в журнале: Научный журнал «Интернаука» № 16(286)
Рубрика журнала: 16. Технические науки
DOI статьи: 10.32743/26870142.2023.16.286.356421
Библиографическое описание
Смыслов С.М. ОПЕРАЦИОННЫЕ СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ И BARE-METAL ПРОГРАММИРОВАНИЕ // Интернаука: электрон. научн. журн. 2023. № 16(286). URL: https://internauka.org/journal/science/internauka/286 (дата обращения: 02.05.2024). DOI:10.32743/26870142.2023.16.286.356421

ОПЕРАЦИОННЫЕ СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ И BARE-METAL ПРОГРАММИРОВАНИЕ

Смыслов Сергей Михайлович

инженер-программист, АО”766 УПТК”,

РФ, г. Красногорск

 

REAL-TIME OPERATION SYSTEM AND BARE-METAL PROGRAMMING

Sergei Smyslov

Software engineer, JSC "766 UPTK",

Russia, Krasnogorsk

АННОТАЦИЯ

В данной статье дается описание принципов работы операционных систем реального времени и сравнение подходов с bare-metal программированием.

ABSTRACT

This article describes the principles of real-time operating systems and compares approaches with bare-metal programming.

 

Ключевые слова: микроконтроллеры, операционные системы реального времени, ОСРВ, программирование, время выполнения, объем памяти, программное обеспечение.

Keywords: microcontrollers, real-time operating systems, RTOS, programming, execution time, memory capacity, software.

 

Введение

При программировании микроконтроллеров существует 2 основных подхода к программированию - bare-metal также называемое программированием на голом железе и подход с использованием операционных систем реального времени (ОСРВ) (на английском real-time operating systems (RTOS)).

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

Прежде чем перейдем к описанию принципов работы следует сделать уточнение - в настоящее время существует 2 типа ОСРВ:

1- ОСРВ “жесткого реального времени”, в данных системах применяются дополнительные механизмы для квантования по времени и разделению ресурсов, данные системы применяются обычно в авиации/космических аппаратах/военной технике.

2- ОСРВ “мягкого времени”, большая часть из них используется в коммерческих проектах например FreeRTOS.

В рамках статьи рассматриваются операционные системы “мягкого времени” как наиболее массовые, со свободным доступом.

Описание принципов работы:

Рассмотрим традиционное программирование (bare-metal) - в рамках данного подхода контроллер представляет собой единое адресное пространство и единую (непрерывную) программу с четко выраженной структурой и предсказуемым результатом.

Если рассматривать изначальный подход, то это был 1 файл и функция main в которой вызывались другие функции/методы.

Со временем в связи с развитием электроники и появления огромного количества периферии (таймеры, контроллеры прямого доступа к памяти и вектора прерываний) код стал "активно" ветвиться, появилась возможность обработки событий “независимо” от течения основной программы, на самом деле происходит прерывание основной программы и выполнения фрагмента кода из обработчика прерывания и как таковой параллельности кода нет, но главный принцип в виде основной функции и единого адресного пространства и предсказуемости кода остался.

Дальнейшее развитие идеи параллелизма кода привело к созданию операционных систем реального времени, в рамках которых отказались от использования одной функции main и перешли к нескольким функциям, переключаемым по таймеру. Стоит отметить, что функции могут выполнять длительные действия, и не уложится во время отведенное таймером на задачу, поэтому используется планировщик (scheduler) который сохраняет при выходе и подгружает при входе в задачу адрес текущей инструкции и переменные.

Отдельной особенностью стоит отметить легкое создание дополнительных копий параллельных задач.

На основе на основе описания принципов работы сформируем описание - сравнение особенностей для каждого из них.

Традиционное (bare-metal) программирование

Минусы – большие исполняемые функции (функция main), отсутствие (традиционными) способами создать обработчик для нового события.

Плюсы – максимальное быстродействие и минимальный объем кода.

Операционные системы реального времени:

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

Плюсы – более простой код в рамках одного потока/задачи, возможность простого увеличения числа задач за счет использования копий в динамической памяти.

Рекомендации по выбору подхода:

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

Традиционное (bare-metal) программирование разумнее использовать для:

1-”маленьких” микроконтроллеров (старые AVR, STM8, STM32F0/STM32F1)

2-для критичных ко времени приложений, только в bare-metal программирование можно получать время обработки и отклика в микро/милли секунды, в ОСРВ это сделать намного сложнее

3-для критичных к предсказуемости приложений (например вооружение/безопасность), за счет единого адресного пространства и последовательного кода шанс неопределенного поведения снижен.

4-при наличии аппаратных ограничений (переход от ОСРВ к bare-metal освобождает немалое количество памяти и таймер)

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

1-систем с пониженным энергопотреблением (можно отслеживать число задач и погружать микроконтроллер в сон)

2-при использовании с системами умного дома/wifi т.к. число датчиков→число задач может изменяться и чаще всего они не критичны ко времени

3-для распределённых систем, когда мощный микроконтроллер по ряду причин (из-за периферии например) выполняет функции одноплатного компьютера/сервера в этом случае использование ОСРВ сэкономит время на разработку кода.

 

Список литературы:

  1. Электронный ресурс посвященный ОСРВ FreeRTOS URL: https://www.freertos.org/
  2. Б.В. Керниган, Д.М. Ритчи.  : “Язык программирования C”, Вильямс, 2019г.