QNX - не случайно! QNX - это относительно большая и сложная ОС для 32-битных устройств с MMU, обеспечивающая не только планирование на уровне ядра, но и файловые системы, отказоустойчивые сети, POSIX API, GUI и т. Д. Его наиболее важной особенностью является поддержка защиты памяти - каждый поток работает в своем собственном сегменте виртуальной памяти, поэтому работает только на устройствах с соответствующей аппаратной поддержкой.
Какие функции вы хотите от вашей ОС? На 8-битном устройстве разумно ожидать упреждающего планирования и IPC на основе базовых приоритетов. Другие службы, такие как работа в сети, файловая система, USB и т. Д., Обычно являются надстройками от поставщика ОСРВ или должны быть интегрированы самостоятельно из стороннего кода.
Очевидным выбором, если вы не хотите тратить деньги, является FreeRTOS. Он компетентен , хотя в некотором смысле нетрадиционен с точки зрения архитектуры, даже если он довольно условен на уровне API. В моих тестах на ARM время переключения контекста было медленнее, чем в других ядрах, которые я сравнивал, с другими, которые я тестировал, но это может не относиться к AVR, и это будет проблемой, если вам потребуется время отклика в реальном времени в порядке несколько микросекунд. AVR имеет довольно большой набор регистров, поэтому переключение контекста обычно дорого в любом случае.
У Atmel есть список сторонней поддержки, включая RTOS, по адресу http://www.atmel.com/products/AVR/thirdparty.asp#. В них перечислено следующее:
- CMX Systems, Inc: CMX-RTX, CMX-Tiny + (дополнения: CMX-MicroNet, CMX-FFS)
- FreeRTOS.org: FreeRTOS
- Микром, Inc: мкК / ОС-II
- Nut / OS: стек RTOS и TCP / IP с API в стиле Posix.
- SEGGER: embOS
У меня есть личный опыт использования CMX-Tiny + (для dsPIC), embOS (для ARM) и FreeRTOS (для ARM), а также для uC / OS-II. Все они компетентны, у uC-OS-II есть небольшое ограничение: разрешать только одну задачу на каждом уровне приоритета (без циклического планирования), но, следовательно, возможно более быстрое переключение контекста. В случае с EmbOS я успешно интегрировал стороннюю файловую систему и USB-код, хотя у производителя также есть свои надстройки для них.