The discussion of standard IO dynamic switching among semihost, UARTx, and NULL on STM32
Hi,
If you only want to implement console I/O using semihosting, the best way to go would probably be to add a file defining the __io_getchar and __io_putchar functions called by read/write as defined in syscalls.c as well as the initialise_function_handles function.
To avoid multiple definitions you must make the empty initialise_monitor_handles function to be weak in syscalls.c by adding __attribute__((weak)) in front of its definition.
To call initialise_monitor_handles can be done directly from the startup code (adding “bl initialise_monitor_handles” before “bl main”) but you can avoid modifying the startup file (which is in assembly language) by adding the constructor attribute to your definition of initialise_monitor_handles:__attribute__((constructor)) void initialise_monitor_handles() { // Your initialisation code }
Then if you include your file, you get semihosting, if you don’t, you don’t even try to initialise it...
Bernard (Ac6)