RTOS ChibiOS/RT – операционная система для микроконтроллеров.
RTOS ChibiOS/RT:
ChibiOs/RT – операционная система реального времени (ОСРВ, RTOS – real-time operating system). Реальное время в операционных системах — способность операционной системы обеспечить требуемый уровень сервиса в определенный промежуток времени. Операционная система, реагирующая на событие за определенный, заданный промежуток времени. ChibiOs/RT предназначена для встраивания приложений, работающих в реальном времени. Эта ОСРВ отличается высокой мобильностью, компактными размерами и, главным образом имеет свою собственную уникальную архитектуру, подходит для быстрого и эффективного переключения контекста.
Основные функции ChibiOs/RT
Функционал применения ChibiOs/RT:
- Эффективное и портативное ядро.
- Лучшая в классе переключения контекста.
- Множество поддерживаемых архитектур и платформ.
- Статическая архитектура.
- Динамическое расширение, динамические объекты поддерживаются с помощью дополнительного слоя.
- Богатый набор примитивов для ОСРВ: потоки (threads), виртуальные таймера (virtual timers), семафоры (semaphores), мьютексы (mutexes), переменные условия/синхронизации (condition variables), сообщения (messages), очереди (queues), флаги событий (event flags) и почтовый ящик (mailboxes).
- Поддержка алгоритма наследования для мьютексов.
- HAL (Hardware Abstraction Layer — слой аппаратных абстракций),поддержкаабстрактныхплатформ: GPIO, UART/USART, ADC, CAN, EXT, GPT, I2C, ICU, MAC, MMC, PWM, RTC, SDC, SPI, UART, USB, USB-CDC.
- Инструментарий для отладки ОСРВ.
Области применения ChibiOs/RT:
- Автомобильная электроника.
- Робототехника и промышленная автоматика.
- Бытовая электроника.
- Системы управления электроэнергией.
- 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 класса логических прерываний:
- Регулярные прерывания. Источник маскируемых прерываний, прерывания не могут воздействовать на код ядра и таким образом появляется возможность вызывать API операционной системы изнутри обработчиков прерываний. Обработчики прерываний, принадлежащие к этому классу должны быть описаны с помощью определенных правил.
- Быстрые прерывания. Источник маскируемых прерываний с возможностью воздействовать на код ядра, таким образом имеют меньше скрытых состояний работы и менее подвержен дребезгу.
- Не маскируемые прерывания. Не маскируемые источники прерываний контролируются операционной системой не полностью и имеют наименьшее число скрытых состояний работы.
Состояние системы
При использовании С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.
One thought on “RTOS ChibiOS/RT – операционная система для микроконтроллеров часть 1.”
Очень хорошо, что кто-то дал описание ChibiOS на русском языке.
Из трёх систем, что я пробовал scmRTOS, FreeRTOS и ChibiOS эта система мне понравилась больше всего. Наиболее логичная, простая в освоении
Comments are closed.