RTX5. Основные понятия RTOS интерфейса

RTOS интерфейс

CMSIS-RTOS2 это основной API интерфейс для RTOS ядра. Программисты вызывают  CMSIS-RTOS2 API функции в пользовательском коде чтобы обеспечить максимальную переносимость от одной RTOS к другой. Middleware (промежуточное ПО)  использующие преимущество этого подхода избегают ненужных усилий портирования кода.

 

Структура CMSIS-RTOS API

Типичная реализация интерфейса CMSIS-RTOS2 API связана с существующим ядром реального времени. API CMSIS-RTOS2 предоставляет следующие атрибуты и функциональные возможности:

  • Названия функций, идентификаторы и параметры являются интуитивные и понятные. Функции мощные и гибкие, что уменьшает количество функций, доступных пользователю.
  • Функции управления потоком позволяют вам определять, создавать и управлять потоками.
  • Процедура обслуживания прерывания (ISR) может вызывать некоторые CMSIS-RTOS функции. Когда функция CMSIS-RTOS не может быть вызвана из контекста ISR, она отклоняет вызов и возвращает код ошибки.
  • Три разных типа событий поддерживают связь между несколькими потоками  и/или ISR:
    • Флаги потока: может использоваться для указания специфичных условий потоку.
    • Флаги событий: может использоваться для указания событий в поток или ISR.
    • Сообщения: могут быть отправлены в поток или ISR. Сообщения буферизуются в очереди.
  • Функции управления мютексами и семафорами так же имеется.
  • Время процессора можно планировать со следующей функциональностью:
    • Параметр тайм-аута включен во многие функции CMSIS-RTOS, чтобы избежать блокировки системы. Когда задан тайм-аут, система ожидает, пока ресурс не будет доступен или произойдет событие. Пока идет ожидание, другие потоки обрабатываются планировщиком.
    • Функции osDelay и osDelayUntil помещают поток в состояние WAITING(ожидание) на указанное время.
    • OsThreadYield обеспечивает совместное поточное переключение (кооперативное) и передает выполнение другому потоку с тем же приоритетом.
  • Функции Управления таймерами используются для запуска на исполнение функций.

API CMSIS-RTOS2 разработан с опциональным обьединением  многопроцессорных систем и/или защищенного доступа через модуль защиты памяти Cortex-M (MPU). В некоторых реализациях RTOS потоки могут выполняться на разных процессорах, поэтому очереди сообщений могут находиться в общей памяти.

API CMSIS-RTOS2 подталкивает индустрию программного обеспечения к развитию существующих реализаций RTOS. Реализации RTOS могут быть разными и оптимизированы в различных  аспектах  для процессоров Cortex-M. Так же могут быть  дополнительные функции, например:

  • Поддержка модуля защиты памяти Cortex-M (MPU).
  • Поддержка многопроцессорных систем.
  • Поддержка контроллера DMA.
  • Детерминированное переключение контекста.
  • Круговое (Round-robin) переключение контекста.
  • Предотвращения блокировки, например, с инверсией приоритета.
  • Нулевая задержка прерывания с помощью команд Armv7-M LDREX и STREX.

Использование реализации CMSIS-RTOS2

Реализация CMSIS-RTOS2 обычно предоставляется в виде библиотеки. Чтобы добавить функциональность RTOS в существующее приложение на основе CMSIS, необходимо добавить библиотеку RTOS (и обычно один или несколько файлов конфигурации). Существует один новый файл заголовка cmsis_os2.h. Это единственный файл заголовка, необходимый для полностью переносимого приложения. В таком случае пользовательская память не может использоваться для блоков управления, данных объектов и стека. В качестве альтернативы вы можете подключить конкретный файл заголовка реализации (например, rtx_os.h), который также предоставляет определения для распределения ресурсов (такие как размер блоков управления, требуемая память для данных объекта и стека). Это необязательно и подразумевает, что код приложения не полностью переносится.

CMSIS-RTOS структура файлов

После добавления файлов в проект пользователь может начать работу с функциями CMSIS-RTOS. Пример кода приведен ниже:

Пример кода:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*----------------------------------------------------------------------------
 * CMSIS-RTOS 'main' function template
 *---------------------------------------------------------------------------*/
 
#include "RTE_Components.h"
#include  CMSIS_device_header
#include "cmsis_os2.h"
 
/*----------------------------------------------------------------------------
 * Application main thread
 *---------------------------------------------------------------------------*/
void app_main (void *argument) {
 
  // ...
  for (;;) {}
}
 
int main (void) {
 
  // System Initialization
  SystemCoreClockUpdate();
#ifdef RTE_Compiler_EventRecorder
  // Initialize and start Event Recorder
  EventRecorderInitialize(EventRecordError, 1U);
#endif
  // ...
 
  osKernelInitialize();                 // Initialize CMSIS-RTOS
  osThreadNew(app_main, NULL, NULL);    // Create application main thread
  osKernelStart();                      // Start thread execution
  for (;;) {}
}

Заголовочный файл cmsis_os2.h

Файл cmsis_os2.h является стандартным файлом заголовка, который взаимодействует со всеми операционными системами реального времени, совместимыми с CMSIS-RTOS2 (RTOS). Каждой реализации предоставляется тот же cmsis_os2.h, который определяет интерфейс для CMSIS-RTOS2.

Использование cmsis_os2.h вместе с распределением динамических объектов позволяет создавать исходный код или библиотеки, которые не требуют изменений при использовании в другой реализации CMSIS-RTOS2.

 

 

Оставить ответ