ZigEmbeddedGroup / regz

Generate zig code from ATDF or SVD files for microcontrollers.
MIT License
82 stars 29 forks source link

Add C++ header generation #120

Open ikskuh opened 5 months ago

ikskuh commented 5 months ago

We should be able to emit a well-formatted C++ header from regz so we can also support users to have C code in their project that can access registers.

Imho, we can support registers way better in C++ than in C and provide features similar to MicroZig where we can have something like

using regs = microzig::chip::registers;
using pinfunc = regs::io::bank0::gpio0::function;

regs::io::bank0::gpio0::ctrl.access() // returns a current value + pointer to register as a struct
    .set_ctrl(pinfunc::uart) // modifies bits in the saved state
    .apply(); // writes back the bits to the register

instead of

IO_BANK0_GPIO0_CTRL |= IO_BANK0_GPIO0_CTRL_FUNCSEL_UART;

With such an API, several changes can be written at once, providing a high level readable API similar to what we have in Zig.