Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Async

Асинхронное программирование позволяет задачам выполняться параллельно, не блокируя друг друга. Во встраиваемых системах это даёт микроконтроллеру возможность обрабатывать несколько задач, например считывать данные с датчиков и управлять другой периферией, не дожидаясь завершения каждой из них. Подробнее об этом можно прочитать в книге Asynchronous Programming in Rust.

Embassy

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

Здесь на помощь приходит Embassy. Embassy — это асинхронный рантайм, созданный для встраиваемых систем. Он позволяет писать неблокирующий код с помощью возможностей async и await языка Rust. Вместо того чтобы ждать и тратить процессорное время впустую, задачи могут приостанавливаться и давать поработать другим. Так процессор используется лучше, а приложения становятся отзывчивее и экономичнее по энергии. Embassy можно использовать с ESP32, Pico и другими микроконтроллерами.

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

HAL

Embassy предоставляет асинхронные Hardware Abstraction Layers (HAL) для нескольких семейств микроконтроллеров. Они предлагают безопасный и идиоматичный API на Rust, так что вы можете работать с железом, не имея дела с низкоуровневыми регистрами.

Официальные HAL включают embassy-stm32 (STM32), embassy-nrf (nRF52/53/54/91), embassy-rp (RP2040) и embassy-mspm0 (TI MSPM0). Embassy также работает с HAL от сообщества, например esp-hal (ESP32), ch32-hal (CH32V), mpfs-hal (PolarFire) и py32-hal (Puya PY32), что упрощает написание переносимого асинхронного кода для множества платформ.

Батарейки в комплекте (Batteries included)

Embassy поставляется со множеством встроенных возможностей, которые упрощают разработку встраиваемых систем. Например, в него входят embassy-time для таймеров и задержек, embassy-net для поддержки сети, embassy-usb для создания USB-устройств и многое другое.

ESP RTOS

В экосистеме esp-hal есть крейт esp-rtos, который обеспечивает интеграцию между esp-hal и асинхронным фреймворком Embassy.

Реализация RTOS (Real-Time Operating System, операционная система реального времени) для esp-hal. Этот крейт предоставляет рантайм, необходимый для выполнения асинхронного кода поверх esp-hal, и реализует возможности (потоки, очереди и т. д.), которые требуются для esp-radio.

Полезные ресурсы