I concur that RTIC isn't appropriate here. It works for most of the applications I've had, but it sounds like this is an exception. Regarding better mutexes: I will cheat. What I'm about to post is just a macro that does not really abstract, but it makes the syntax cleaner by allowing most of the boilerplate to go away, so you can focus on the semantically-meaningful parts: Declare: ```rust make_globals!( (FLASH, Flash), (SPI1, Spi) (CONFIG, Config), ); ``` Use: ```rust access_global!(CONFIG, config, cs); ``` or: ```rust access_globals!([ (CONFIG, config), (FLASH, flash), ], cs); ``` Init: ```rust init_globals!( (FLASH, flash), (CONFIG, config), // ... ); ```