Содержание
ChibiOS
Некоторое время назад, я встретил в интернете очень интересный проект:ChibiOS/RT
Общая информация
ChibiOS — проект компактной многозадачной операционной системы реального времени (ОСРВ) для встроенных систем. Проект состоит из трех независимых продуктов:
- RT - высокопроизводительная RTOS для встраиваемых систем реального времени.
- NIL - очень компактная RTOS для встраиваемых систем реального времени.
- HAL - пакет включающий в себя набор абстрактных драйверов устройств дающий возможность легко портировать приложение на различные архитектуры.
Кроме того, проект включает ChibiStudio - бесплатную среду разработки.
Лицензия
Компоненты ChibiOS доступны под лицензиями открытого ПО GPL3 или Apache 2.0. Есть несколько коммерческих лицензионных опций
Компоненты ChibiOS
ChibiOS/RT предназначена для встраиваемых систем реального времени, где важное требование для выполняемых приложений - это высокая производительность и компактный код. Данная ОС РВ характеризуется высокой мобильностью, маленьким объёмом и, в основном, по своей архитектуре оптимизирована для чрезвычайно эффективного переключения между задачами.
Основные преимущества:
- Высокая производительность RTOS
- Статичная архитектура — все ресурсы статически выделяется во время компиляции.
- Динамические расширения — динамические объекты поддерживаются как дополнительный слой надстройки статичного ядра.
- Богатый набор примитивов: потоки, виртуальные таймеры, семафоры, мьютексы, переменные условия, сообщения, почтовые ящики, флаги событий.
- Поддержка алгоритма приоритетного наследования мьютексов.
ChibiOS/NIL создавался с идеей привнести RTOS функциональность для очень маленьких устройств и является вполне законченной RTOS. Основные преимущества:
- Компактная RTOS, размер кода менее 1кБ при максимальной конфигурации.
- Малый размер объектов в памяти, таких как потоки, семафоры и т.п.
- Полностью статическая архитектура
Вне зависимости от размера, ChibiOS/NIL очень эффективна и поддерживает широкий набор функций.
ChibiOS/HAL предназначен для реализации уровня абстракции между приложением и базовым аппаратным обеспечением (периферией) микроконтроллера.
HAL предоставляет API верхнего уровня для доступа к общей периферии MCU, такой как GPIO, ADC, SPI и т.д., а также реализует частотно-зависимую и платформо-зависимую инициализацию.
Этот компонент распространяется только под лицензией Apache License 2.0 и является 100% бесплатным даже для коммерческого использования. Основные особенности:
- уровень абстракции между приложением и аппаратурой MCU позволяет ускорить процесс разработки и позволяет применять объектно-ориентированный подход. Тонкости внутренней организации аппаратной части являются скрытыми для приложения (но не недоступными).
- Поддерживает большинство общей стандартной периферии MCU: порт ввода/вывода (GPIO), последовательный порт (Serial), ADC, CAN, I2C, MAC, MMC, PWM, SPI, UART, USB, USB-CDC
- Интерфейсный уровень, не привязанный к RTOS, называемый OSAL. Интерфейсы OSAL могут быть реализованы для поддержки любой аналогичной RTOS.
- Поддержка RT и NIL RTOS из коробки.
- Многоуровневая структура драйверов.
- Портирован на многие современные микроконтроллеры.
- Поддержка внешних компонентов uIP, lwIP, FatFs.
Автором операционной системы является господин Giovanni Di Sirio, который живет в прекрасном городе Салерно, Италия. Официальный сайт проекта http://chibios.org.
В принципе, там есть вся необходимая информация для знакомства и начала работы с системой. Единственный минус - сайт англоязычный. Поэтому часть информации буду дублировать тут, в качестве шпаргалки, попутно добавляя свои комментарии и различные полезные ссылки.
Поддерживаемые архитектуры
ОС поддерживает много архитектур. Этот список постоянно расширяется. Вот список поддерживаемых архитектур, который был на официальном сайте до момента разделения ChibiOS на два компонента RT и NIL и выделения HAL в отдельный компонент:
Архитектура ядра | Компилятор | Поддерживаемые платформы |
---|---|---|
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 |
Есть еще несколько платформ, поддержка которых пока не включена в официальные релизы и доступна из репозитория проекта. Это такие платформы:
- AVR32
- Coldfire
- Fujitsu 16FX
- H8S
- NiosII
Реализация поддержки этих платформ выполнялась сторонними разработчиками и сейчас находится в стадии тестирования. В будущем, вероятно, будет включена в релиз.
Актуальную информацию по поддерживаемым архитектурам можно посмотреть на официальном сайте:
- ChibiOS/RT Supported Architectures
- ChibiOS/NIL Supported Architectures
Поддержка аппаратуры
Очень большим достоинством ChibiOS является реализация драйверов периферии - Hardware Abstraction Layer (HAL). С использованием ChibiOS/HAL вполне реально писать прикладное ПО которое будет работать без дополнительных (или с минимальными) действий не только на разных кристаллах одной архитектуры, но и на разных архитектурах. Все кристалло и архитектуро зависимые вещи выносятся в файлы описания платы board.h/board.c. Набор поддерживаемой периферии довольно широк - детально его можно посмотреть в разделе Supported Platforms
Инструментальные средства
«Из коробки» поддерживаются три компилятора (см.Поддерживаемые архитектуры):
- GCC
- RealView Compilation Tools (RVCT)
- IAR
Для быстрого старта, автором сделан пакет ChibiStudio. Это по сути полностью готовая и настроенная связка Eclipse+GCC+нужные плагины. Скачать ее можно со страницы загрузки: ChibiStudio
Кстати, ChibiStudio (т.е. Eclipse), похоже, единственный пакет имеющий плагин для визуализации процесса отладки. Ни под IAR, ни под Keil я таких плагинов не нашел. Для людей привычных к работе с GCC и Eclipse процесс отладки будет довольно удобным.
В ChibiStudio есть еще один довольно удобный и нужный плагин - ChibiOS Board Generator. С его помощью можно создавать файлы board используя визуальный интерфейс. Более подробно этот процесс описан тут: ChibiOS Board Generator
Я лично больше пользуюсь Keil MDK, наверное в силу привычки, но и в этом случае особых проблем с отладкой не возникало. При наличии общих понятий о работе RTOS и наличии исходников ChibiOS/RT все вопросы быстро разрешаются.
Ссылки
Внешние ссылки
Сайт проекта. Документация.
Официальный сайт ChibiOS
Страница документации по ChibiOS
ChibiOS на GitHub
ChibiOS/RT free embedded RTOS на Sourceforge
ChibiOS/RT 2.6.9 full documentation
ChibiOS/RT 3.1.2 online documentation
Статьи и обзоры:
STM32F103C8 + ChibiOS + uGFX + LCD WH1602 пример
ARMka: Инфраструктура проекта для ChibiOS/RT
ChibiOS и STM32 «Тема предназначена для глобального обсуждения аспектов разработки приложений под STM32, используя ОС реального времени ChibiOS. В первом топике буду вставлять нужные ссылки по теме, на документацию и т.д.»
Исследуем работу стека нитей в ChibiOS «Операционные системы реального времени (RTOS) существенно облегчают разработку качественной программной начинки для микроконтроллеров. Делается это введением некоторых абстракций, таких как нити (потоки исполнения) и примитивы синхронизации (семафоры, мютексы, события, сообщения), потоки ввода/вывода, устройства слоя абстракции аппаратуры (HAL) и другие. В этой статье мы рассмотрим внутреннюю организацию нитей (threads), изолированных потоков исполнения кода, в ChibiOS.»
Генерация board файлов для ChibiOS (ChibiOS Board Generator) «Создание board файлов для новой платы при использовании ChibiOS может оказаться очень трудоемким процессом. ChibiStudio или специальный плагин для среды Eclipse могут сделать его намного проще.»