Embassy – Modernes Embedded-Framework auf Basis von Rust und async
(github.com/embassy-rs)- Framework der nächsten Generation, entwickelt, um sichere und effiziente Embedded-Anwendungen schnell zu erstellen
- Gewährleistet Speicher- und Thread-Sicherheit zur Compile-Zeit ohne Runtime oder Garbage Collector und ermöglicht Multitasking auch ohne RTOS
- Unterstützt verschiedene Mikrocontroller und umfasst zentrale Funktionen wie HAL, Networking, Bluetooth, USB und Bootloader
- Berücksichtigt mit Low-Power-Design und prioritätsbasiertem Executor sowohl Echtzeitverarbeitung als auch Akkulaufzeit
- Etabliert sich als führende Plattform für asynchrone Embedded-Entwicklung in Verbindung mit dem Rust-Ökosystem
Überblick über Embassy
- Embassy ist ein Framework der nächsten Generation, mit dem sich mithilfe von Rust und async-Funktionalität sichere und effiziente Embedded-Anwendungen schreiben lassen
- Läuft ohne Runtime, Garbage Collector und Betriebssystem
- Gewährleistet Speicher- und Thread-Sicherheit zur Compile-Zeit
Architektur auf Basis von Rust + async
- Nutzt Rusts async/await für effizientes Multitasking in Embedded-Umgebungen
- Tasks werden zur Compile-Zeit in Zustandsmaschinen (state machines) umgewandelt und kooperativ ausgeführt
- Keine dynamische Speicherallokation erforderlich, Ausführung auf einem einzelnen Stack
- Erreicht schnelleren und kleineren Code auch ohne Context Switching eines RTOS
- Im verlinkten Material wird ein Leistungsvorteil gegenüber RTOS erwähnt
Wichtige Komponenten (Batteries Included)
- Hardware-Abstraktionsschicht (HAL)
- Steuert Hardware-Funktionen über sichere Rust-APIs
- Wichtige unterstützte Plattformen: STM32, nRF, RP2040, MSPM0, ESP32, CH32, PolarFire SoC, PY32
- Zeitverwaltung (embassy-time)
- Bietet global nutzbare Typen wie Instant, Duration, Timer, ohne Overflow
- Echtzeit- und Low-Power-Unterstützung
- Durch das Erzeugen mehrerer Executor ist prioritätsbasierte Task-Ausführung möglich
- Im Leerlauf wird der Core automatisch in den Energiesparmodus versetzt, interruptbasiertes Wake-up
- Networking (embassy-net)
- Unterstützt Ethernet, IP, TCP, UDP, ICMP, DHCP
- Die asynchrone Struktur vereinfacht Timeout-Management und die Verarbeitung mehrerer Verbindungen
- Bluetooth
- Unterstützt verschiedene BLE-Stacks wie
trouble,nrf-softdevice,embassy-stm32-wpan
- Unterstützt verschiedene BLE-Stacks wie
- LoRa, USB, Bootloader
- Unterstützung für den LoRaWAN-Stack über
lora-rs embassy-usbimplementiert USB CDC und HID-Klassenembassy-bootunterstützt Firmware-Updates, die auch bei Stromausfällen sicher sind
- Unterstützung für den LoRaWAN-Stack über
Technische Daten und Lizenz
- Minimal unterstützte Rust-Version (MSRV): ab 1.75
- Lizenz: Wahlweise Apache-2.0 oder MIT
- Der Projektname ist eine Abkürzung für „** EMBedded ASYnc**”
2 Kommentare
Hacker-News-Kommentare
Ich bin ein großer Fan des Embassy-Projekts. Es ist ein perfektes Beispiel dafür, warum async Rust so großartig ist
Es läuft ohne Heap und ermöglicht dank Zero-Cost-Abstraktionen nebenläufige Ausführung sogar auf Single-Core-Chips. Dazu kommt, dass die Komplexität eines RTOS wegfällt
Es ist wirklich erstaunlich, wie weit das Embassy-Team gekommen ist.
Ich kann außerdem reqwless empfehlen, einen HTTP-Client für Embassy-net. Unterstützt sogar HTTPS
Früher dachte ich nicht, dass Rust im Embedded-Bereich besser als C/C++ ist, aber inzwischen entscheide ich den Kauf eines MCU danach, ob Rust unterstützt wird
Allerdings verstehe ich immer noch nicht ganz, was ein Watchdog ist
An Embassy gefällt mir besonders die Application-Pattern-Schicht
Die Struktur besteht aus langlebigen Device-Tasks, die Timing und Koordination hinter kleinen async APIs verbergen
Zum Beispiel erzeugt der Compiler bei Code wie
loop { let btn = ir.wait_for_press().await; }automatisch eine ZustandsmaschineIch denke, dieser Stil ist ein natürliches Ergebnis von async + no-std
Ich wünschte, es gäbe mehr Diskussionen über diese Art von Anwendungsstruktur als über HALs oder den Executor
In diesem kostenlosen Artikel, den ich mit Brad Gibson geschrieben habe, behandeln wir genau diese Ideen
Ich habe außerdem das Repository device-kit eröffnet, um solche Muster zu erproben und zu dokumentieren. Ich würde gern weitere Repos kennen, die Ähnliches versuchen
Als ich früher NIC-Firmware als Zustandsmaschine geschrieben habe, wäre etwas wie async in Rust wirklich großartig gewesen
Man kann in C zwar Coroutinen nachahmen, aber das ist sehr hacky
Damals glaubte ich, dass RTOS-Threads zu teuer seien, aber im Nachhinein stimmt das wohl nicht unbedingt
Auch bei der Verarbeitung von Protokollen wie 802.11 hätte async den Code viel kleiner und einfacher gemacht
Ich mag Embassy wirklich sehr
Ich komme von Bare-Metal-C und FreeRTOS, und es fühlt sich an, als hätte Embedded endlich eine moderne Toolchain bekommen
Besonders das umliegende Ökosystem ist hervorragend — probe-rs + cargo run-Integration, defmt-Logging, embedded_hal, stm32-rs usw.
Ich habe auch RTIC verwendet, bin aber wegen der ergonomischen Nutzbarkeit der async-Syntax bei Embassy geblieben
Ich war überrascht, dass es auch unter macOS direkt baut und läuft. Früher musste ich immer Linux verwenden, jetzt geht es direkt auf M-Chips
Es hat eine Weile gedauert, das Konzept des geteilten Zugriffs auf Peripherie zu verstehen, aber da die Lock-Regeln zur Compile-Zeit erzwungen werden, gibt es fast keine Bugs
Auch die Qualität des USB- und Networking-Stacks ist sehr hoch. Ich verwende PLDM over USB und einen Ethernet-TCP-Stack, und es funktioniert perfekt
Ein Nachteil ist, dass das Onboarding für Leute schwierig ist, die an bestehende Vendor-Beispiele gewöhnt sind, und dass die Zusammenarbeit beim Debugging schwerfällt, wenn der Vendor Rust nicht kennt
Trotzdem würde ich es im STM-Ökosystem sehr empfehlen
embassy_syncEmbassy und async Rust sind die größte Innovation in der Embedded-Welt der letzten zehn Jahre
C-basierte RTOS sind konzeptionell gut, aber in der Praxis schmerzhaft zu benutzen. Ein leichtgewichtiges Framework wie Embassy ist eine natürliche Weiterentwicklung
Embassy kann man im Grunde auch als Echtzeitbetriebssystem sehen. Mehr dazu in diesem Artikel
Ich schreibe Glicol gerade auf no-std um, und die Kombination aus embassy-rs + 2350 ist hervorragend
Wenn du 2026 mit Embedded-Entwicklung anfangen willst, würde ich diesen Stack sehr empfehlen
Das ist etwas off-topic, aber ich frage mich, womit man am besten in die Embedded-Entwicklung einsteigt
Ich habe über zehn Jahre nur Webentwicklung gemacht und arbeite mich gerade durch ein Rust-Buch. Ich habe einen Raspberry Pi bestellt, aber kann man das überhaupt als echtes Embedded bezeichnen?
Ein Modell mit USB-Port wie das NUCLEO-F767ZI wäre gut
Es hat Wi‑Fi, BLE und sogar einen 6-Achsen-Sensor, und die C-Demos laufen sofort. Auch LVGL ist großartig
Rust habe ich darauf noch nicht benutzt, aber die RISC-V-Basis macht es interessant. Elecrow oder Makerfabs sind ebenfalls gut für Anfänger
Für Rust ist rp-hal gut für den Einstieg, und Embassy kann man etwas später ausprobieren
Wenn du näher an Bare Metal heran willst, würde ich ein ESP32-Board empfehlen. Es ist günstig und in vielen Formfaktoren erhältlich, auch mit Ladegerät für Akkus oder mit Display
Ich habe mit Embassy einen LoRa-Relay gebaut und nutze ihn mit der Bitchat-App (auf nrf52-Basis)
Das meiste läuft sehr reibungslos, und die Panics lagen an Problemen auf der Nordic-SoftDevice-Seite
Ich habe mit Embassy an einem Controller für ein Spark-Modeling-Gitarrenverstärker-Pedal gearbeitet
Der Verstärker wird per BLE gesteuert, und es war interessant, dass der Rust-BLE-Stack vollständig Open Source ist
Allerdings ist das Ganze noch in einem frühen Stadium, sodass sich die API oft geändert hat und ich in Cargo Git-Revisionen festpinnen musste
Trotzdem bin ich gespannt auf die Zukunft des Projekts
Auch Microsoft verwendet Embassy für ECs (Embedded Controller)
Mehr dazu im Open Device Partnership
Ariel OS ist ein Betriebssystem, das auf Embassy aufbaut. Einen Blick wert
Ich habe mit
embassy-rsunter Verwendung des STM32G030C8T6 bereits ein Produkt entwickelt und bis zur Serienfertigung gebracht, und bei der Nutzung gibt es einige Nachteile.Wenn man auf ein nicht allgemein übliches HAL zugreifen muss, braucht man am Ende doch den Ansatz, den man auch mit dem RTIC-Framework verwendet hat.
Wegen
asyncbesteht ein hohes Risiko, dass der Speicher ineffizient genutzt wird, daher muss man vorsichtig sein.Für die Entwicklung in Umgebungen mit 32 KB Flash-Speicher oder weniger ist es sehr einschränkend. (
log+ Debug-Symbole usw.)Wenn man außerhalb des Ökosystems von NRF/STM/ESP/RP entwickeln möchte, ist es faktisch sehr schwierig.
embassy-rsist gut geeignet, um einen Eindruck von Rust Embedded zu bekommen, aber wenn man später Verbesserungen im Hinblick auf Serienfertigung oder die eigene Karriere anstrebt, scheint es besser zu sein, sich auch RTIC genauer anzusehen.Andererseits besteht die Sorge, dass die gute Zugänglichkeit als eine Art fortgeschrittenes Rust Arduino eher dazu führen könnte, dass man bei anspruchsvollerer Entwicklung in unangenehme Situationen gerät.