FX-RTOS Lite - это ядро ОСРВ, предназначенное для устройств на микроконтроллерах. Оно написано на языке Си стандарта C99, реализовано в виде статической библиотеки, содержащей сервисы ОС.
API включает в себя следующие сервисы:
- потоки
- программные таймеры (одноразовые и периодические)
- семафоры
- мьютексы с защитой от инверсии приоритета
- очереди сообщений
- пулы блоков памяти
- события
- условные переменные
- барьеры
- пулы памяти произвольного размера
- rw-блокировки
Версия Lite поддерживает наиболее распространенные процессорные архитектуры:
- ARM Cortex-M3 + (архитектура ARMv7-M, также может использоваться на ARMv8-M)
- RISC-V (профиль RV32I)
Релиз | Платформа |
---|---|
async-cortex-m3-GNU-tools.zip |
Минимальная ОС, использующая процедуры обработки событий вместо потоков, для cortex-m3+ |
standard-cortex-m3.zip |
Обычная конфигурация для контроллеров cortex-m3+ |
standard-riscv32i-GNU-tools.zip |
Обычная конфигурация для набора команд RISC-V rv32i |
Версия ARM поддерживает компиляторы GCC, Keil MDK и IAR EWARM. Версия RISC-V на данный момент поддерживает только GCC.
В качестве ОС для сборки может использоваться Windows или Linux (Mac тоже должен работать, но не тестировался). Никаких внешних зависимостей, кроме компилятора, не требуется.
Этот репозиторий содержит несконфигурированную версию ядра, представленную в виде набора компонентов - исходных текстов. Это полезно, если вы хотите создать специфическую конфигурацию или внести свой вклад в развитие ОС. В случае, если вам просто нужно готовое ядро для использования в своём приложении, подумайте об использовании предварительно сконфигурированных ядер, доступных для ARM и RISC-V.
- Загрузите и распакуйте соответствующий архив выпуска из Releases
- Убедитесь, что поддерживаемый компилятор доступен через переменную окружения PATH
- Установите переменную среды GCC_PREFIX, если вы используете GCC (например 'riscv-none-embed-')
- Войдите в каталог внутри cores, в котором находятся сборочные скрипты build.bat и Makefile
- Запускаем команду 'build.bat' или 'make'
Для тех, кто не хочет возиться с инструментами и исходным кодом, мы предоставляем готовые двоичные файлы. Хотя бинарная версия может быть достаточной для большинства пользователей, в ней отсутствуют параметры настройки и оптимизации.
- Установить переменные окружения:
- FXRTOS_DIR как путь к корневой папке ядра
- GCC_PREFIX в качестве префикса компилятора, если вы используете GCC (например, 'arm-none-eabi-' для ARM, если компилятор доступен через PATH)
- FXDJ как путь к инструменту внедрения зависимостей fx-dj.py
- Войдите в каталог для целевого ядра (например, cores/standard-cortex-m3)
- Запустите 'build.bat' в Windows или 'make src', а затем make lib в Linux / Mac
- Если сборка зависимостей завершилась неудачей, то перед повторной попыткой необходимо удалить созданный скриптом каталог ./src
ОС может быть связана с проектом как двоичный файл или может быть добавлена как набор исходных файлов в проект IDE. Демонстрации использования находятся в репозитории fxrtos-examples.
Обратите внимание, что версия Lite - это ядро, работающее в режиме мягкого реального времени. Он НЕ предназначен для детерминированной работы в реальном времени. Расширенные функции, такие как детерминированные таймеры, отложенная обработка прерываний с малой задержкой, поддержка многопроцессорности, разделение уровней привилегий и безопасность доступны только в полной версии. За подробностями обращайтесь в отдел продаж EREMEX.
При разработке приложений с критичным временем задержки с использованием версии Lite следует учитывать следующие ограничения:
- Широковещательная передача (или "уведомление всех") объектов синхронизации, таких как condvar или event. Большее количество ожидающих потоков приводит к увеличению задержки, поскольку процесс уведомления не является вытесняющим. Возможные решения: не использовать широковещательные объекты или ограничивать максимальное количество ожидающих потоков.
- Политика уведомления на основе приоритетов с объектами синхронизации (например увеличение счётчика семафора и освобождение ожидающего потока с наибольшим приоритетом) использует линейный поиск с отключенным планированием. Это означает, что N ожидающих потоков приводит к неограниченному времени планирования и задержке прерываний O(n). Возможные решения: используйте политику уведомления FIFO или ограничьте максимальное количество ожидающих потоков для любого объекта синхронизации.
- Очистка очереди сообщений освобождает до N потоков, где N - длина очереди. Возможные решения: не используйте очистку очереди или ограничьте длину очереди разумным значением.
- Реализация таймеров использует сортированные очереди и линейный поиск, что дает задержку O(n) в зависимости от количества активных таймеров в системе. Возможные решения: Ограничьте максимальное количество программных таймеров и не используйте временные интервалы.
По техническим вопросам использования FX-RTOS Lite обращайтесь через группу Telegram (https://t.me/fxrtos).