Standard for UVM / embedded C/C++ interactions

My DUT has an embedded microcontroller running some C/C++ code and I’d like to drive the DUT through my UVM register sequences, but I don’t want to force the driver on the bus interface, but rather communicate with the microcontroller in “some way” so the software performs the actual bus transactions.

I’ve used various techniques so far, all based on performing backdoor access on a dut memory location used by the software to do what it needed to do. With a bunch of “flags” the UVM and C world shared data and implemented a handshake protocol to take control in turns.

I believe this problem is solved by many in very different ways but possibly all relying on similar mechanisms.

I’ve tried to look for some article on the subject but I’ve found only one: Bring IP verification closer to SoC, which is advocating something on the same lines I briefly described above.

Are you aware of any standard or library to facilitate these exchanges between the UVM world and the running software on the embedded controller ?

Any pointer is appreciated.