The largest issue IMO is that there's sorta three models to handling "state machines and I/O over time": * the `embedded-hal` approach, which is "linear code, but you can't yield". Works best when blocking is okay, when you have pre-emption like RTIC's old hw tasks, or an RTOS that can do multithreading * the `embedded-hal-nb` approach, which is "non-linear code, but you have to write the state machines yourself for multitasking", where you do some kind of request, and have to poll it at some interval manually to tell if it is done * the `embedded-hal-async` approach, which is basically "use the nb approach, but the compiler makes it look like the first approach", in that YOUR code is still very linear, because the compiler wrote all the state machine transitions for you