I wonder how many of you have actually tried to use Rust for embedded? I did, for ARM (STM32F1 & F4 series) because I liked the idea of built-in coroutines/async.
TL;DR - it is not mature enough.
But probably not because of what you think. The language itself is fine even though the extremely noisy syntax is an acquired taste and the constant battle with and having to bend over backwards at design stage to make the borrow checker happy feels wrong. When the tool dictates architecture or you will never get it to compile it is a problem. But I digress. The documentation is also mostly OK and I am not missing vendor tooling - that one is almost universally crap. Give me vendor-independent compilers and tools any day.
The real problem embedded Rust is the ecosystem. Even for "desktop" Rust this is a problem, for embedded it is a complete showstopper. For languages like C, C++ or Python you are going to find millions of tools, libraries, etc. For Rust? Maybe one or two libraries solving the problem you need solved. For embedded it is even worse because Rust is a niche language - and embedded Rust is an even smaller niche within the niche.
The catch? They are mostly one-man projects, often last updated several years ago and not touched since because the author has lost interest and/or moved on to something else. So they don't work with the current compiler or require obsolete dependencies or (in the case of embedded Rust) don't work without the standard library or don't support the MCU you need to use it with ... In the best case, they are half-finished - and you discover that only after spending hours trying to make some unimplemented feature work.
So unless you have nothing better to do with your time or are writing everything from scratch, including USB stacks and RTOSes as a matter of course, this is really not the tool you are looking for.
I am sure Rust fanboys will jump at me now with "But you can just use X!!!!", "But look at Y!!!", "But safety!" - but that's completely irrelevant. If the tool isn't solving
my use case it is not the tool for the job. I need to get work done, I am not messing with it for fun or because I like this language over that one.
BTW, re code safety in Rust - that you have a borrow checker doesn't mean you won't crash your MCU or destroy your data. It merely prevents one class of bugs that other languages, even C, can avoid too, even though the developer needs to do more work and be more diligent in order to not shoot themselves in the foot. This Rust feature is likely one of the most overblown and misunderstood language features in history.
I am keeping an eye on Rust and periodically check on projects like
https://embassy.dev/ hoping that things get better supported but I am still writing most of my code in C, C++ and Python instead.