Async Rust против RTOS на STM32: кто победит в реальном тесте?

Embedded Rust RTOS vs. C RTOS

Async Rust против RTOS на STM32: кто победит в реальном тесте?

В блоге Tweede golf сравнивают Embassy (async Rust) и FreeRTOS (C) на микроконтроллере STM32F446. Обе системы запускают одинаковые приложения: мигание светодиодом, обработка нажатия кнопки и передача сообщений через очередь. Измеряются задержки прерываний, размер программы, использование статической памяти и удобство программирования. Автор ожидает, что RTOS будет быстрее по задержкам, а Rust — компактнее по памяти, но результаты могут удивить.

В общем, планировщик вызывает функцию `poll` один раз и затем вызывает её снова только при срабатывании waker.
  1. Animats

    Это при очень легкой нагрузке на процессор. Поэтому асинхронный подход без вытеснения может работать. Если есть какие-то значительные вычисления, он будет работать не так хорошо.

    Полезное число для измерения на осциллографе — это наихудшая задержка прерывания. Это важно, если есть жесткие ограничения реального времени. Они измеряли стандартное отклонение, но не наихудший случай. Обычная тестовая установка такова: входной сигнал (обычно меандр) подается на входной пин, происходит прерывание, если прерывания не запрещены, запускается задача, задача включает выходной пин. Вы смотрите на задержку от входа до выхода на осциллографе и ищете выбросы.

    Если вы работаете полностью до завершения, выбросы определяются самой длинной вычислительной задачей. Это проблема, если есть вычислительная задача.

    Исторически здесь блистает QNX. Прерывание обрабатывается и планирует поток. Почти все, что происходит на уровне прерывания, — это активация потока. Поток включает выходной пин. Вы можете смотреть на осциллографе на выбросы планирования. Наилучшая задержка выше, чем при выполнении работы на уровне прерывания, но наихудшая задержка постоянна, даже если потоки с более низким приоритетом выполняют вычисления.

    Это разница между реальным временем и планированием «почти реального времени».

  2. CupricTea

    Название следует изменить. Async Rust != RTOS. RTOS — это вытесняющая многопоточность, в то время как async работает кооперативно с точками yield.

    Возможно, «Встраиваемый асинхронный Rust против C RTOS».

  3. joshchngs

    Этой статье уже почти 5 лет, что делает ее довольно древней в терминах Embedded Rust. Думаю, общая картина не сильно изменилась, но я бы с осторожностью полагался на любые детали из нее.

Ещё за этот день

2026-09-02