RTOS ChibiOS/RT – операционная система для микроконтроллеров.

RTOS ChibiOS/RT:

ChibiOs/RT – операционная система реального времени (ОСРВ, RTOS — real-time operating system). Реальное время в операционных системах — способность операционной системы обеспечить требуемый уровень сервиса в определенный промежуток времени. Операционная система, реагирующая на событие за определенный, заданный промежуток времени. ChibiOs/RT предназначена для встраивания приложений, работающих в реальном времени. Эта ОСРВ отличается высокой мобильностью, компактными размерами и, главным образом имеет свою собственную уникальную архитектуру, подходит для быстрого и эффективного переключения контекста.

Основные функции ChibiOs/RT

Функционал применения ChibiOs/RT:

  1. Эффективное и портативное ядро.
  2. Лучшая в классе переключения контекста.
  3. Множество поддерживаемых архитектур и платформ.
  4. Статическая архитектура.
  5. Динамическое расширение, динамические объекты поддерживаются с помощью дополнительного слоя.
  6. Богатый набор примитивов для ОСРВ: потоки (threads), виртуальные таймера (virtual timers), семафоры (semaphores), мьютексы (mutexes), переменные условия/синхронизации (condition variables), сообщения (messages), очереди (queues), флаги событий (event flags) и почтовый ящик (mailboxes).
  7. Поддержка алгоритма наследования для мьютексов.
  8. HAL (Hardware Abstraction Layer — слой аппаратных абстракций),поддержкаабстрактныхплатформ: GPIO, UART/USART, ADC, CAN, EXT, GPT, I2C, ICU, MAC, MMC, PWM, RTC, SDC, SPI, UART, USB, USB-CDC.
  9. Инструментарий для отладки ОСРВ.

Области применения ChibiOs/RT:

  1. Автомобильная электроника.
  2. Робототехника и промышленная автоматика.
  3. Бытовая электроника.
  4. Системы управления электроэнергией.
  5. DIY.

Производительность ChibiOs/RT [Таблица 1].

Таблица 1. Синтетические тесты. Версия ядра 2.4 ChibiOs/RT

Платформа-Частота -Компилятор Переключение контекста Размера ядра, байт
ARM7(ARM)/LPC2148-48-GCC4.6.2 2.03µS 9224
ARM7(THUMB)/LPC2148-48-GCC4.6.2 2.43µS 6052
ARMCM0/LPC1114-48-GCC4.6.2 2.60µS 5500
ARMCM0/LPC1343-72-GCC4.6.2 1.02µS 6172
ARMCM3/STM32F1xx-72-GCC4.6.2 1.03µS 6172
ARMCM3/STM32F4xx-168-GCC4.6.2 0.40µS 6172
MSP430F1611-8-GCC3.2.3 16.93µS 6108
AVR/ATMega128-16-GCC4.3.0 11.24µS N/A ~7500
STM8L152-16-Cosmic N/A N/A ~6500
STM8L152-16-Raisonance 9.03µS N/A ~7000
STM8S105-16-Cosmic N/A N/A ~6500
STM8S105-16-Raisonance 9.03µS N/A ~7000
PA/SPC563M64-80-GCC4.4.1 1.11µS 11944

Ядро ChibiOs/RT было перенесено на множество различных архитектур и для различных компиляторов, однако текущая стратегия заключается в поддержке меньшего числа конкретных микроконтроллеров, и для текущего набора официально поддерживаемых микроконтроллеров обеспечить полноценный HAL. HAL — слой абстрагирования, реализованный на уроне удобных пользовательский функций, находящийся между физическим уровнем аппаратного обеспечения и программным обеспечением, работающим с периферией микроконтроллера. HAL предназначен для скрытия различий в аппаратном обеспечении от основной части, алгоритма работы программы, таким образом, чтобы большая часть кода, работающая в режиме ядра, не нуждалась в изменении при запуске ОСРВ на различных платформах микроконтроллеров.

ChibiOs/RT предлагает отличную поддержку для нескольких популярных семейств микроконтроллеров. Для семейств, которые не входят в официальный дистрибутив существует сообщество и поддержка от авторов сторонних семейств микроконтроллеров.

Официально поддерживаемые платформы

Следующий список включает в себя архитектуры и платформы поддерживаемые ChibiOs/RT [таблица 2]. Следующие платформы тщательно протестированы и стабильно работаю со своим набором инструментария. Для каждой архитектуры представлен список поддерживаемых семейств микроконтроллеров.

Таблица 2. Официально поддерживаемые платформы ChibiOs/RT

Ядро архитектуры Компилятор Поддерживаемые платформы
ARM Cortex-M0 (ARMv6-M) GCC LPC11xx, LPC11Uxx, STM32F0xx
ARM Cortex-M0 (ARMv6-M) RVCT LPC11xx, LPC11Uxx, STM32F0xx
ARM Cortex-M3 (ARMv7-M) GCC LPC13xx, STM32F1xx, STM32F2xx, STM32L1xx
ARM Cortex-M3 (ARMv7-M) IAR LPC13xx, STM32F1xx, STM32F2xx, STM32L1xx
ARM Cortex-M3 (ARMv7-M) RVCT LPC13xx, STM32F1xx, STM32F2xx, STM32L1xx
ARM Cortex-M4 (ARMv7-ME) GCC STM32F3xx, STM32F4xx
ARM Cortex-M4 (ARMv7-ME) IAR STM32F3xx, STM32F4xx
ARM Cortex-M4 (ARMv7-ME) RVCT STM32F3xx, STM32F4xx
ARM7 GCC AT91SAM7x, LPC214x
MegaAVR GCC ATmega128, AT90CAN128, ATmega328p, ATmega1280
MSP430 GCC MSP430F1611
Power Architecture e200z GCC/HighTec SPC56x (all)
STM8 Cosmic STM8L, STM8S
STM8 Raisonance STM8L, STM8S

Концепция ядра ChibiOS/RT

Соглашение по именованию:

Все имена в ChibiOs/RT имеют следующую концепцию записи ch<группа><действие><суффикс>.

Возможны следующие группы: Sys, Sch, Time, VT, Thd, Sem, Mtx, Cond, Evt, Msg, Reg, SequentialStream, IO, IQ, OQ, Dbg, Core, Heap, Pool.

API имена суффиксов.

Суффикс может быть:

None, API (application programming interface, интерфейс прикладного программирования) без суффиксов не может быть вызван из кода пользователя в нормальном режиме, если по-другому не указано.

«I», API, I-класса являются нерегулярными только в состояниях I-Locked или S-Locked.

«S», API S-класса являются нерегулярными только с S-Locked состоянии.

Примеры: chThdCreateStatic(), chSemSignalI(), chIQGetTimeout().

Классы прерываний

В ChibiOS / RT существуют 3 класса логических прерываний:

  1. Регулярные прерывания. Источник маскируемых прерываний, прерывания не могут воздействовать на код ядра и таким образом появляется возможность вызывать API операционной системы изнутри обработчиков прерываний. Обработчики прерываний, принадлежащие к этому классу должны быть описаны с помощью определенных правил.
  2. Быстрые прерывания. Источник маскируемых прерываний с возможностью воздействовать на код ядра, таким образом имеют меньше скрытых состояний работы и менее подвержен дребезгу.
  3. Не маскируемые прерывания. Не маскируемые источники прерываний контролируются операционной системой не полностью и имеют наименьшее число скрытых состояний работы.

Состояние системы

При использовании СhibiOs/RT система может находиться в одном из следующих рабочих логических состояниях:

Init. B этом состоянии все маскируемые источники прерываний запрещены, не представляется возможным использовать различные системные API, за исключением chSysInit(), состояние системы возможно определить после физического сброса.

Normal. Все источники прерываний разрешены, доступны системные API, потоки выполняются.

Suspended. В этом состоянии разрешены быстрые, но не регулярные источники прерываний, не представляется возможным использовать различные системные API, исключением являются chSysDisable() или chSysEnable(), с их помощью можно изменить состояние системы.

Disabled. В этом состоянии, регулярные и быстрые источники прерываний запрещены, не представляется возможным использовать различные системные API, исключением являются chSysSuspend() или chSysEnable(), с помощью их можно изменить состояние системы.

Sleep. Архитектурно-зависимый режим пониженного энергопотребления. В этом состоянии находятся потоки в режиме ожидания. После возникновения прерывания восстанавливается нормальное состояние работы планировщика, при котором есть возможность перепланировать работу потоков или продолжить выполнение задач до входа в режим пониженного энергопотребления.

S-Locked. Ядро заблокировано и регулярные источники прерываний запрещены. Быстрые источники прерываний разрешены. API S-класса, и I-класса нерегулярные в этом состоянии.

I-Locked. Ядро заблокировано и регулярные источники прерываний запрещены. API I-класса нерегулярные в этом состоянии.

Обработка регулярных прерываний. Нет доступа к системным API, но можно переключиться на состояние I-Locked и использовать chSysLockFromIsr(), и вызывать различные I-Class API. Обработка прерываний может быть вытеснена на некоторых архитектурах, чтобы перейти к I-Locked состоянию до вызова системных API.

Обслуживание быстрых прерываний. Системные API недоступны.

Обслуживание не маскируемых прерываний. Системные API недоступны.

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

Следующая диаграмма [рисунок 1] показывает возможные переходы между состояниями работы:

Рисунок 1. Состояние работы ChibiOs/RT

Обратите внимание, что SFI, Halted и SNMI состояния не были показаны, потому что они доступны для большинства состояний [рисунок 2].

Рисунок 2. SFI, Halted и SNMI

Планировщик

Планировщик — часть операционной системы, которая отвечает за параллельное выполнения задач, потоков, процессов. Планировщик выделяет потокам процессорное время, память, стек и прочие ресурсы. Планировщик может принудительно забирать управление у потока, либо ожидать пока поток отдаст управление планировщику [рисунок 3].

Рисунок 3. Многопоточность ChibiOs/RT

Выбор работы потока зависит от приоритета задачи. Приоритет задачи – важность задачи для планировщика, чем выше приоритет, тем быстрее планировщик ее начнет выполнять и тем меньше система потратит процессорного времени на выполнении задачи. ChibiOs/RT имеет следующие стандартные приоритеты: IDLEPRIO, LOWPRIO, NORMALPRIO, HIGHPRIO и ABSPRO.

В следующей статье мы разберем, как создавать проект для Keil, напишем программу для мигания светодиодов для STM32F429i – DISCO и разберем реализацию многозадачности в ChibiOs/RT.

Отправить ответ

1 Комментарий на "RTOS ChibiOS/RT – операционная система для микроконтроллеров часть 1."

Уведомлять о
avatar
Сортировать по:   Самый новый | Самый старый | Наиболее проголосовали
Игорь
Гость

Очень хорошо, что кто-то дал описание ChibiOS на русском языке.
Из трёх систем, что я пробовал scmRTOS, FreeRTOS и ChibiOS эта система мне понравилась больше всего. Наиболее логичная, простая в освоении

wpDiscuz