Hey folks! I’ve been working on the `riscv-peripheral` crate to support standard RISC-V peripherals using a raw pointer fashion: https://github.com/romancardenas/riscv-peripheral/tree/main I’d like to know your opinion about my current approach. Namely: - Peripherals are just “empty” structs with a bunch of associated functions to retrieve their registers. Thus, no ownership of the peripheral is required. - I added an unsafe trait to determine the base address of the peripherals. Thus, once a PAC implements this trait, almost all the operations are safe (except cases like changing a priority and so on). - For every peripheral, I developed a macro that does the work of defining the peripheral struct in the PAC. Currently, I just re-expose the associated functions of the base peripherals and, in some cases, add per-HART associated functions for improving the developer experience. Please, let me know if you come up with a better software design/architecture 😃