So I think I got my head around async/await in #Rust, and I also know how IRQs work on embedded systems. But it was oddly hard to find a good article on exactly how to join up those two bits of knowledge: how to ".await" where what you're waiting for is an IRQ happening ("transfer complete", for instance). This article, though, was great and cleared it all up: https://interrupt.memfault.com/blog/embedded-async-rust (it talks about #Embassy but I bet it works the same in #rtic 2)
Asynchronous Rust on Cortex-M Microcontrollers

A community and blog for embedded software makers

Interrupt
Of course it doesn't help that a Pin is vital to how async/await works, and a Pin is also often vital to how an IRQ works, but they're _completely_ different concepts both called "Pin".

@TalesFromTheArmchair Yep, since async/await is a language construct it works the same for all executors.

The only difference between difference executors is how it structures and spawns tasks and how those tasks are polled.

For example, embassy tasks are statically allocated and tokio's are heap allocated.
Embassy polls them in the context of the executor and tokio can poll them in different threads.

But wakers and polling are the same for all