Картинка не моя. Только для иллюстрации.
Картинка не моя. Только для иллюстрации.

Я бегаю и катаюсь на велосипеде, и меня давно раздражает, что любой фитнес-браслет или приложение рано или поздно требует подписку, льёт данные в чужое облако и не даёт ничего настроить под себя. Захотелось собрать свой гаджет с GPS, блэкджеком и ..., словом, на котором выводится именно то, что мне нужно, и полным контролем над прошивкой и данными.

Бюджет у нас, мягко говоря, гаражный. Но за каждый цент себестоимости не трясемся. Важнее получить удовольствие от разработки. К счастью есть JLCPCB. Там можно заказать и платы, и сборку. На этом и базируемся. Проектируем так, чтобы всё максимально собиралось на их стороне и их комплектации, а дома оставалась только сборка и прошивка.

Давайте определимся с главными характеристиками будущего дивайса.

  • Носимый. Компактный форм‑фактор, автономное питание от аккумулятора, наличие встроенной зарядки.

  • Экономичный. Минимальное энергопотребление в режиме ожидания.

  • Беспроводной. Чтобы имел Wi‑Fi, Bluetooth Low Energy.

  • Радиоуправляемый. Если будет команда, то чтобы была возможность прямого обмена данными между устройствами без участия смартфона или интернета.

  • С контрастным дисплеем и подсветкой, читаемым и днём, и ночью.

  • Защищенный. Водонепроницаемость для использования во время тренировок и на открытом воздухе.

  • Навигационный. Чтобы был GNSS‑модуль и акселерометр, гироскоп, магнетометр для отслеживания перемещений и движений.

  • Киберзащищенный. Ну просто без этого теперь кое-где не дадут разрешения на применение в открытом интернете.

Первое, что приходит в голову, зайдя в свой "гараж" (будем так его называть) - это великолепная троица: ESP32, Arduino, Raspberry Pi, ну там ещё где-то STM32F103 с клонами. Но это все не оригинально и грубо. Давайте посмотрим глубже.

Нам нужна независимость платформы от радиоинтерфейсов. Мы делаем не поделку-однодневку. Все серьезно. А потому отпадает ESP32 с его жесткой привязкой к определенному стандарту радиоинтерфейсов. Делаем платформу независимой от смены поколений беспроводных стандартов и так гарантируем долгий жизненный цикл. Мы же не хотим, чтобы дивайс морально устарел через год.
ESP32 возьмём (а куда денемся при такой цене), но временно. Берем в работу сразу два модуля: u‑blox MAYA‑W276‑00B и Espressif ESP32‑C6‑MINI‑1U‑N4. Оба подключаются по SDIO и поддерживают Wi‑Fi 5/6 + BLE 5.3, но выпускаются разными производителями в разных регионах.

Для навигации берем GNSS‑модуль ATGM332D‑5N‑7X. Он совместим пин в пин с u‑blox NEO‑8, тут тоже при необходимости можем заменить на u‑blox и даже без переразводки платы.

Заметил как-то интересный факт: над Восточной Европой видимых спутников BeiDou в небе, как правило, вдвое больше, чем GPS. Это значит, приём BeiDou в GNSS‑модуле маст-хэв.

Так что по микроконтроллеру?

Он должен быть мощный и экономичный. Тут сразу отпадает Arduino. По экономичности отпадает Raspberry. Кстати, кто-нибудь видел полный мануал на их процессор, он вообще существует в природе?
Ну у нас есть STM32. Вернее море разных STM32. А помните как они исчезли из продажи пару лет назад, и все сразу! Так что не зацикливаемся и смотрим дальше.

Давайте подумаем а какой софт будет в нашем приборе. Начнем: драйвера BLE и Wi‑Fi, полный стек TCP протоколов c WEB, GTP, HTTP, SHTTP, DNS, DHCP, SNTP, MQTT ...., IMU‑алгоритмы (Маджвик, Калман и прочие), файловая система на SD-карте и возможно на SPI Flash, GUI он же HMI для дисплея, GNSS‑обработка (здесь GPS, GLONASS, BeiDou и т.д.). Это все конечно тянет RTOS. Задач будет уйма. А RAM-а сколько! Страшно подумать.

А данных? Их тоже будет очень много. Нельзя просто так взять и написать алгоритм определения типа физической активности да еще количественно описать эту активность. Нужны будут мегабайты телеметрии. А self‑learning движки? Их тоже хочется попробовать. По практическому опыту, пропускная способность порядка 50 Мбит/с достижима на ядре с частотой в районе 200 МГц и выше, и это без учёта параллельной работы IMU‑фильтров, файловых систем и отрисовки GUI. А если совсем экзотика типа particle‑фильтров для коррекции GNSS‑данных? Уж не на многоядерку ли мы замахиваемся?

Да чуть не забыл, нам нужен собственный облачный портал с сервисами управления, OTA‑обновлениями прошивок, сбором логов и телеметрии. Мы ж не в одном экземпляре дивайс делаем. Взаимодействие с такими сервисами строится поверх TLS 1.2+ с клиентскими X.509‑сертификатами на базе RSA или ECC, по аналогии с требованиями AWS IoT Core, Azure IoT Hub, IBM Cloud и других IoT‑платформ, где минимум составляет RSA‑2048, а для Azure рекомендуется уже RSA‑3072+ либо ECC. Аппаратный криптодвижок с поддержкой этих алгоритмов фактически обязательное требование. Без него TLS‑хэндшейк на ядре класса Cortex‑M занимает ощутимое время и значительно нагружает процессор.

Кибербезопасность отдельная головная боль. Поговаривают, что скоро сертификат на кибербезопасность будет так же обязателен, как сертификат на электромагнитную совместимость и электро- и пожаробезопасность. Прошивки должны быть зашифрованы, подписаны, передаваться по защищенным каналам, устройства должны иметь глобально уникальные серийные номера, уникальные пароли и т.д. и т.п.

Из требований к устройству формируются минимальные параметры микроконтроллера:

  • RAM ≥ 640 КБ: BLE‑стек (NimBLE), сетевой стек (NetX Duo), RTOS и буферы обмена с радиомодулем должны работать одновременно.

  • Flash ≥ 1 МБ: прошивка с несколькими стеками протоколов, драйверы периферии и место для GUI ресурсов, сертификатов и прочих артефактов.

  • Частота ≥ 200 МГц: обработка данных с IMU, GNSS и радиомодулей в реальном времени.

  • 2 × SDIO‑хост: один канал для Wi‑Fi/BLE‑сопроцессора, второй для SD‑карты.

  • Отсутствие встроенного радио: архитектурное требование, описанное выше.

  • QFP‑корпус: возможность ручной пайки на этапе прототипирования.

Ниже приведён сравнительный анализ представителей наиболее популярных семейств, удовлетворяющих этим критериям.

STM32H743 (STMicroelectronics)

Параметр

Значение

Ядро

Cortex‑M7 (FPU double‑precision)

Частота

480 МГц

Flash

2 МБ

RAM

1 МБ (ITCM 64K + DTCM 128K + AXI SRAM 512K + SRAM1-4 352K)

Корпуса

LQFP100 / LQFP144 / LQFP176 / TFBGA240

Периферия

2× SDMMC, Ethernet, USB HS, 2× OSPI, DCMI, JPEG‑кодек

Крипто

CRYP (AES‑128/256, DES/3DES), HASH (SHA‑1/SHA‑256/MD5), TRNG

RTOS

FreeRTOS, Azure RTOS (ThreadX/NetX/FileX), Zephyr, RT‑Thread, ChibiOS

Экосистема

STM32CubeIDE, CubeMX, HAL/LL, обширный middleware (FatFS, LwIP, USB)

Отладка

ST‑LINK/V3 (SWD/JTAG), J‑Link, любой CMSIS‑DAP‑адаптер

Самый популярный высокопроизводительный контроллер на рынке. Огромное сообщество, наиболее зрелая экосистема в индустрии. FreeRTOS и Azure RTOS интегрированы прямо в CubeMX, поддерживаются «из коробки». Однако ядро Cortex‑M7 относится к поколению 2014 года и не поддерживает Helium (MVE). Карта памяти сложная: шесть несмежных блоков SRAM.

STM32N657 (STMicroelectronics)

Параметр

Значение

Ядро

Cortex‑M55 (Helium MVE, TrustZone)

Частота

800 МГц

Flash

❌ нет встроенной (внешняя через Hexa‑SPI / OSPI / FMC)

RAM

4,2 МБ (единый непрерывный блок)

NPU

ST Neural‑ART Accelerator™ @ 1 ГГц, 600 GOPS

Корпуса

VFBGA‑169 / VFBGA‑197 / VFBGA‑264 (только BGA)

Периферия

2× SDMMC, Ethernet, USB HS, OSPI, Hexa‑SPI, MIPI‑CSI‑2, ISP, H.264 кодек, NeoChrom™ 2D GPU

Крипто

SAES (AES‑128/256), PKA (RSA‑4096, ECC), HASH (SHA‑1/2/3), TRNG

RTOS

FreeRTOS, Azure RTOS (ThreadX), Zephyr

Экосистема

STM32CubeIDE, CubeMX, STM32Cube.AI (развёртывание моделей на NPU)

Отладка

ST‑LINK/V3 (SWD/JTAG), J‑Link

Первый STM32 со встроенным нейропроцессором, 600 GOPS для edge AI. Ядро Cortex‑M55 с Helium при 800 МГц (CoreMark ~3360). Рекордные 4,2 МБ непрерывной SRAM. Тот же набор RTOS и инструментов CubeIDE/CubeMX, плюс STM32Cube.AI для деплоя нейросетей на NPU. Однако нет встроенной Flash, требуется внешняя память, что усложняет разводку и удорожает BOM. Только BGA‑корпуса.

RA8M1 (Renesas)

Параметр

Значение

Ядро

Cortex‑M85 (Helium MVE, FPU, TrustZone)

Частота

до 480 МГц

Flash

2 МБ

RAM

1 МБ (ITCM 64K + DTCM 64K + SRAM 896K)

Корпуса

LQFP‑144 / BGA‑176

Периферия

2× SDIO‑хост, Ethernet, USB HS, OSPI, SDRAM‑контроллер, CAN‑FD, I3C

Крипто

RSIP‑E51A (AES‑128/256, RSA‑2048/4096, ECC, SHA‑2/3, TRNG)

RTOS

FreeRTOS, Azure RTOS (ThreadX/NetX/FileX), оба интегрированы в FSP; Zephyr

Экосистема

e² studio (Eclipse), FSP (Flexible Software Package), RA Smart Configurator, VS Code

Отладка

J‑Link (встроен в EK‑RA8M1), Renesas E2 / E2 Lite (SWD/JTAG)

Новейшее ядро ARM (Cortex‑M85, 2022) с расширением Helium, дающим до 4× ускорение DSP/ML‑вычислений. Уникальная для класса MCU особенность: встроенный SDRAM‑контроллер. Есть QFP‑144, паяемый вручную. FreeRTOS и Azure RTOS (ThreadX + NetX Duo + FileX) доступны прямо из конфигуратора FSP. В составе Azure RTOS для RA8 поставляется модуль NetX Secure с аппаратным ускорением TLS через криптодвижок RSIP‑E51A, и хэндшейк RSA/ECC выполняется без нагрузки на ядро. Экосистема (FSP) менее зрелая, чем STM32 HAL/CubeMX, сообщество существенно меньше.

RA8P1 (Renesas)

Параметр

Значение

Ядро

Cortex‑M85 (Helium MVE, FPU, TrustZone) + Ethos‑U55 NPU

Частота

1 ГГц

Flash

1 МБ

RAM

2 МБ SRAM

NPU

Arm Ethos‑U55

Корпуса

BGA‑224 / BGA‑289

Периферия

2× SDHI, Gigabit Ethernet, USB HS, OSPI, SDRAM‑контроллер, CAN‑FD, I3C

Крипто

RSIP‑E51A (AES‑128/256, RSA‑2048/4096, ECC, SHA‑2/3, TRNG)

RTOS

FreeRTOS, Azure RTOS (ThreadX/NetX/FileX) через FSP; Zephyr

Экосистема

e² studio, FSP, RA Smart Configurator (общая экосистема с RA8M1)

Отладка

J‑Link, Renesas E2 / E2 Lite

Флагман семейства RA8 со встроенным нейропроцессором Ethos‑U55, прямой конкурент STM32N657. Cortex‑M85 на 1 ГГц с Helium и Gigabit Ethernet. 2 МБ SRAM и SDRAM‑контроллер для расширения. Экосистема (FSP, e² studio, RTOS) полностью совпадает с RA8M1, код портируется без изменений. Однако только BGA‑корпуса (224/289 пинов), невозможна ручная пайка. Отлично подходит для носимого устройства с задачами AI‑инференса, обеспечивает путь миграции внутри одного семейства RA8 без смены экосистемы.

i.MX RT1176 (NXP)

Параметр

Значение

Ядро

Cortex‑M7 @ 1 ГГц + Cortex‑M4 @ 400 МГц

Частота

1 ГГц

Flash

❌ нет встроенной (внешняя QSPI/HyperFlash)

RAM

2 МБ (FlexRAM 512K, конфигурируемая как ITCM/DTCM/OCRAM + OCRAM1 512K + OCRAM2 512K + OCRAM M4 256K)

Корпуса

BGA‑289

Периферия

2× Ethernet (1G + 100M), USB, SDIO, MIPI‑DSI/CSI, 2D GPU (PXP)

Крипто

CAAM (AES‑128/256, DES/3DES, RSA‑4096, ECC, SHA‑1/2, TRNG)

RTOS

FreeRTOS (в составе SDK), Zephyr, NuttX, Azure RTOS

Экосистема

MCUXpresso IDE / SDK / Config Tools, обширный middleware

Отладка

J‑Link, MCU‑Link (NXP), LPC‑Link2 (CMSIS‑DAP)

Первый в свое время в отрасли микроконтроллер на 1 ГГц. Достаточно обкатан. FreeRTOS поставляется в составе MCUXpresso SDK с примерами для обоих ядер, есть даже дистрибутивы Линукс для него. Однако отсутствие встроенной Flash требует внешнюю QSPI/HyperFlash‑микросхему, что усложняет разводку и удорожает BOM. Только BGA‑289.

GD32H759 (GigaDevice)

Параметр

Значение

Ядро

Cortex‑M7 (FPU)

Частота

600 МГц

Flash

3,5 МБ

RAM

1 МБ (ITCM 64K + DTCM 128K + AXI SRAM 256K + SRAM0 128K + SRAM1 384K + Backup 4K)

Корпуса

LQFP100 / LQFP144 / LQFP176 / BGA

Периферия

2× SDIO, Ethernet, USB HS, OSPI, TLI (графический контроллер)

Крипто

CAU (AES‑128/256, DES/3DES), HAU (SHA‑1/SHA‑224/256, MD5), TRNG

RTOS

FreeRTOS (community), RT‑Thread (официальный BSP)

Экосистема

Keil/IAR, GD32 SDK; документация и примеры значительно беднее STM32

Отладка

J‑Link, GD‑Link (фирменный), CMSIS‑DAP

Привлекательное соотношение цены и характеристик: 600 МГц и 3,5 МБ Flash. RT‑Thread, основная RTOS с нативным BSP; FreeRTOS поддерживается сообществом. Однако китайский производитель, вопросы качества документации. Ядро M7 без Helium. Экосистема и поддержка существенно уступают остальным в этом обзоре.

XMC7200 (Infineon)

Параметр

Значение

Ядро

Cortex‑M7 @ 350 МГц + Cortex‑M0+ @ 100 МГц

Частота

350 МГц

Flash

до 8 МБ

RAM

1 МБ (SRAM0 256K + SRAM1 256K + SRAM2 256K + SOCMEM 256K)

Корпуса

BGA / QFP‑176

Периферия

SDIO‑хост, CAN‑FD (5 каналов), Ethernet, USB, SMIF (аналог OSPI)

Крипто

Crypto Block (AES‑128/256, SHA‑256/512, ECC, RSA‑4096, TRNG)

RTOS

FreeRTOS (в составе ModusToolbox), Zephyr (ограниченная поддержка)

Экосистема

ModusToolbox (Eclipse / VS Code), PDL (Peripheral Driver Library)

Отладка

J‑Link, KitProg3 (встроен в EVK), MiniProg4 (Infineon)

Рекордный объём Flash (до 8 МБ) и автомобильный грейд. FreeRTOS интегрирован в ModusToolbox. Есть 1× SDIO‑хост. Нет SDRAM‑контроллера. ModusToolbox менее удобен в сравнении с аналогичными средами. Высокая унификация периферии, будет сложнее писать драйвера.

Сводная таблица

MCU

Part Number

Ядро

Частота

RAM

Flash

SDIO

QFP

Helium

Крипто (RSA)

Цена (DigiKey), $

STM32H743

STM32H743VGT6

M7

480 МГц

1 МБ

2 МБ

❌ нет RSA

8.75

STM32N657

STM32N657A0H3Q

M55 + NPU

800 МГц

4,2 МБ

RSA‑4096

12.13

RA8M1

R7FA8M1AHECFB#AA0

M85

480 МГц

1 МБ

2 МБ

RSA‑4096

12.70

RA8P1

R7KA8P1KFLCAB#UC0

M85 + Ethos‑U55

1 ГГц

2 МБ

1 МБ

RSA‑4096

17.20

i.MX RT1176

MIMXRT1176DVMAB

M7 + M4

1 ГГц

2 МБ

RSA‑4096

13.30

GD32H759

GD32H759IMK6

M7

600 МГц

1 МБ

3,5 МБ

❌ нет RSA

9.60

XMC7200

XMC7200D-F176K8384AA

M7 + M0+

350 МГц

1 МБ

8 МБ

RSA‑4096

15.70

Вывод

Разброс цен среди рассмотренных MCU незначителен: от 8,75до8,75до17,20 при партии 100 шт. На первый взгляд очень привлекателен GD32H759: 600 МГц, 3,5 МБ Flash, QFP‑корпус и самая низкая цена ($9,60). Однако у него подозрительно урезаны криптографические функции, нет аппаратного RSA, а экосистема значительно слабее конкурентов. Впрочем, с приходом постквантовой криптографии RSA всё равно уйдёт на пенсию, так что, возможно, GD32 просто опередил своё время.

Выбор: Renesas RA8M1 (R7FA8M1AHECFB#AA0), по совокупности критериев:

  • Корпус: LQFP‑144, пригодный для ручной пайки прототипов;

  • Функциональность: Cortex‑M85 с Helium, 2× SDIO, SDRAM‑контроллер, аппаратный RSA‑4096;

  • Экосистема: FSP + FreeRTOS/Azure RTOS из коробки, e² studio / VS Code;

Любопытный факт: ещё в сентябре 2024 года Renesas завершил приобретение компании Altium, нашей базовой САПР для разработки печатных плат, а вместе с ней и поисковик компонентной базы Octopart. И вот, пока писалась эта статья, Renesas запустил портал Renesas 365. Сам я туда пока не заходил, но по анонсу это единая облачная платформа: проектирование схем и плат (Altium), подбор компонентов (Octopart), конфигурация MCU и генерация кода, полный цикл от идеи до готового проекта в одном окне браузера. Открытый вопрос: ценовая модель. десктопный Altium Designer всегда стоил от $5 000/год, облачный Altium 365 имел бесплатный тарифный план только для просмотра проектов. Будет ли полноценное проектирование в Renesas 365 бесплатным или по подписке, пока неясно.

Выбор RTOS

Устройство предполагает более трёх десятков параллельных задач: BLE‑стек, Wi‑Fi‑транспорт, TCP/IP, TLS, файловая система на SD‑карте, GUI, IMU‑фильтры, GNSS, OTA, USB и др. Это не просто «мигание светодиодом под RTOS», нужна полноценная среда с сетевым стеком, файловой системой, графикой и поддержкой TLS. Выбор ядра диктуется не столько самим планировщиком, сколько наличием и полнотой middleware‑компонентов вокруг него.

Кандидаты

Критерий

FreeRTOS

Azure RTOS (ThreadX)

Zephyr

RT‑Thread

Лицензия

MIT

MIT (Eclipse Foundation)

Apache 2.0

Apache 2.0

Планировщик

Preemptive, time‑slicing

Preemptive, time‑slicing, threshold scheduling

Preemptive, cooperative, EDF

Preemptive, round‑robin

TCP/IP

FreeRTOS‑Plus‑TCP, LwIP (стороннее)

NetX Duo (встроенный)

Встроенный стек

LwIP, встроенный

TLS

mbedTLS / wolfSSL (стороннее)

NetX Secure (встроенный, оптимизирован)

mbedTLS (встроенный)

mbedTLS (стороннее)

Файловая система

FatFS, LittleFS (стороннее)

FileX + LevelX (встроенные)

FatFS, LittleFS (встроенные)

DFS + FatFS / LittleFS

GUI

❌ нет (LVGL стороннее)

GUIX (встроенный)

LVGL (интеграция есть)

Persimmon / LVGL

USB

❌ нет (TinyUSB стороннее)

USBX (встроенный)

USB‑стек (встроенный)

TinyUSB / RT‑Thread USB

Поддержка RA8M1 в FSP

✅ полная

✅ полная

⚠️ ограниченная

❌ нет BSP

Сертификация

❌ нет

IEC 61508 SIL 4, IEC 62304

❌ нет

❌ нет

Латентность

Зависит от конфигурации

Детерминированный O(1)

Зависит от конфигурации

Зависит от конфигурации

FreeRTOS

Самый популярный RTOS в мире embedded. Минималистичное ядро, огромное сообщество, множество примеров. Однако это именно ядро: сетевой стек, файловую систему, GUI и USB‑стек придётся собирать из разрозненных сторонних компонентов (LwIP, FatFS, LVGL, TinyUSB). Каждый из них: свой API, своя модель потоков, свои баги. Интеграция работает, но требует значительных усилий, а связность компонентов остаётся на совести разработчика. Для проекта с 30+ задачами и полным набором middleware это превращается в самостоятельную инженерную задачу.

Azure RTOS (Eclipse ThreadX)

Изначально коммерческая RTOS от Express Logic, приобретённая Microsoft и в 2023 году переданная в Eclipse Foundation под MIT‑лицензией. Ключевое преимущество: монолитный middleware‑стек. ядро ThreadX, сетевой стек NetX Duo, TLS‑модуль NetX Secure, файловая система FileX с wear‑leveling (LevelX), GUI‑библиотека GUIX и USB‑стек USBX. Все компоненты разработаны одной командой, используют единый API и общую модель потоков, нет «зазоров» между сторонними библиотеками.

Планировщик ThreadX детерминированный O(1): время переключения контекста не зависит от числа задач. Поддерживается preemption‑threshold scheduling, механизм, позволяющий ограничить вытеснение внутри группы задач без использования мьютексов, что снижает количество переключений контекста.

Для RA8M1 весь стек интегрирован в Renesas FSP: ThreadX, NetX Duo, FileX, GUIX и USBX конфигурируются через RA Smart Configurator и поставляются с HAL‑привязками к периферии (SDHI, Ethernet, USB, SPI Flash). NetX Secure умеет использовать аппаратный криптодвижок RSIP‑E51A, и TLS‑хэндшейк выполняется с аппаратным ускорением RSA/ECC без нагрузки на ядро.

Zephyr

Перспективная RTOS под крылом Linux Foundation с обширной поддержкой плат и драйверов. Имеет собственный сетевой стек, интеграцию с mbedTLS, поддержку FatFS/LittleFS и LVGL. Однако поддержка RA8M1 в Zephyr на сегодня ограничена, нет полноценной интеграции с FSP‑периферией (SDHI, USB, крипто). Для проекта это означало бы написание HAL‑прослойки с нуля, что сводит на нет преимущества готовой экосистемы.

RT‑Thread

Активно развивающаяся китайская RTOS с богатым набором компонентов. Имеет нативный BSP для GD32, но не для Renesas RA8. Документация преимущественно на китайском. Для данного проекта не рассматривается.

Вывод

Выбор: Azure RTOS (ThreadX), единственный вариант, дающий полный middleware‑стек (TCP/IP, TLS, файловая система, GUI, USB) из одних рук с полной интеграцией в FSP для RA8M1. FreeRTOS проигрывает не как планировщик, а как платформа: собирать эквивалентный набор middleware из разрозненных библиотек, это месяцы дополнительной интеграции. Zephyr перспективен, но поддержка RA8M1 пока недостаточна для production‑проекта.

Резюме

Итак, цель проекта: создать открытый спортивный гаджет, свободный от проприетарных экосистем и подписок. Определил требования: Wi‑Fi, BLE, дальнее радио (LoRa / Sub‑GHz), GPS, IMU, экран, SD‑карта, OTA и собственный облачный портал. Радио реализовано внешними модулями, а не встроено в основной MCU, и при смене радиостандарта переделка платы минимальна. Перебрал семь контроллеров и четыре RTOS, в итоге остановился на Renesas RA8M1 и Azure RTOS (ThreadX).