It is quite normal that your program that uses semihostion cannot run without attached debugger.
What is semihosting?
Semihosting is a mechanism that enables code running on an ARM target to communicate and use the Input/Output facilities on a host computer that is running a debugger.
In fact, the _write routine of rdimon library generate software BKPT instructions handled by the debug agent (here openocd) .
Generally when we need to use semihosting for debugging and we need to have a release version for standalone running purpose we manage to create two different configrations :
- Release Configuration : in which we link against nosys.specs or you add syscalls.c
- Debug Configuration : in which we link against rdimon.specs, and we add a symbole (define) named DEBUG
In your source code initialise_monitor_handles() should appear within #ifdef DEBUG .... #endif