Embassy: Modern embedded framework, using Rust and async
Real-world usage and impressions
- Used successfully for BLE and LoRa projects, USB video-to-OLED streaming, MQTT-based HomeAssistant nodes, and a guitar amp BLE controller.
- Generally reported as stable; panics usually attributed to vendor softdevices rather than Embassy itself.
- Strong praise for the overall Rust embedded toolchain around it:
probe-rs,defmt,embedded-hal, and PAC crates. - Microsoft uses it in an embedded-controller project; Ariel OS is built on it, and it coexists with other ecosystems like RTIC and Xous.
Async vs blocking and ecosystem “split”
- One concern: much new embedded Rust OSS is written assuming Embassy-style async, creating friction for those preferring synchronous or bare-metal styles.
- Others counter that many Embassy HALs expose near-parity blocking APIs and still lean on
embedded-hal, so you can mostly avoid async if desired. - Reimplementing simple drivers per framework is seen by some as acceptable and even desirable; skepticism expressed toward fully generic HALs.
Power, ergonomics, and concurrency model
- Proponents highlight:
- No-heap async, cooperative multitasking, and automatic CPU sleep at
awaitpoints. - Dramatic ergonomic gains versus hand-written state machines and interrupt-driven globals, especially for multi-IO workflows (double buffering, timeouts, composition).
- No-heap async, cooperative multitasking, and automatic CPU sleep at
- Critics argue async is not inherently more power-efficient; WFI/sleep and interrupts work just as well in non-async designs, and “async vs blocking” is a false dichotomy.
RTOS vs async and real-time guarantees
- Embassy markets itself as obsoleting traditional RTOSes for many use cases; some users agree for general-purpose microcontroller firmware.
- Others strongly object:
- Async Rust provides cooperative concurrency, not hard real-time guarantees.
- Traditional RTOS features—preemptive scheduling with bounded latency/jitter and strict timing guarantees—are not replaced.
- Concern that README language overstates what async/Embassy provides.
- Comparison with FreeRTOS and RTIC sparks debate; one link shows good latency numbers, but at least one commenter calls the comparison “apples to oranges.”
Hardware, getting started, and constraints
- Recommended MCUs: RP2040, ESP32-C3/C6, STM32 Nucleo boards, Nordic nRF52/nRF54 (the latter still incomplete), with praise for integrated debugging and good docs.
- Raspberry Pi SBCs are considered “embedded Linux,” not the typical microcontroller target for Embassy.
- Some worry about large dependency graphs (100+ crates for a blinky) due to supply-chain and regulatory tracking; others see that as an acceptable trade-off for a modern embedded experience.