100% branch coverage? This is absolutely necessary, especially because some branches (by default in case operations for machine states, for example) cannot be started. I expect there are some exceptions, and if not, you may need to understand that coating testing may and may not complete before you start - otherwise you will end up pulling your hair or, even worse, give incorrect data .
Most coverage testing for embedded systems is actually done on a PC. The code is portable, some aspects of the microcontroller are emulated in software, and Bullseye or another similar utility is launched to cover the PC code. The reason for this is that there are too many microcontrollers and compilers / debuggers / test environments to develop code coverage tools for each of them.
When code coverage tools exist for a specific embedded platform, they are not as powerful, customizable, easy to use, and error free as those designed for the PC platform. Processors often do not have the traceability (without high-level hardware emulation) necessary to ensure good code coverage without inserting additional debugging code into your firmware, which then has consequences and side effects that are difficult to control, especially with time problems in real-time systems.
Porting code is not terribly difficult if you can ignore hardware code (and since you use C ++ correctly, it should be easy, right ?; -D). The biggest problem you'll encounter is the types, which, although they are better specified in C ++ than in C, still pose some problems. Make sure you use the .h type or similar setting to specifically tell the compiler exactly what you are using and how to interpret it.
After that, you can go to the city, checking the basic logic on the PC. You can even test low-level hardware drivers if you are interested in developing the necessary software emulation for this, although synchronization problems can be somewhat unpleasant.
Software testing tools such as MxVDev do most of the microcontroller emulation for you and also help with timing issues, but you will still have a little work even with that help.
If you have to do this in the system itself, you will need to purchase an emulator for the processor with the ability to cover - not an inexpensive offer (many emulators cost more than $ 30,000 for a complete set of tools and emulation equipment), but this is one of many tools used in highly reliable environments such as automotive and aerospace.
-Adam
Disclaimer: I work for a company that produces MxVDev.