Single step is working but you are impatient, you have to step some more lines (in your case 1 line) till it become visible.
You are facing two different things here:
1) How printf in newlib is working
2) How EBmonitor is working
1) printf doesn not always flush out everything right away. But if you have a newline then most likely it will flush the line. This depends how the buffering is set.
2) EBmonitor normally stops when the debugger stops and will poll the pipe on a live time ticker. event.
If you turn on "High-performance" it will poll te pipe constantly instead of using the live time ticker.
The latest consumes more bandwidth of the interface.
With "High-performance" EBmonitor is still paused on debugger stop but you have more chance that it has pulled the data before it stops.
Normally when you are using printf you won't notice a time difference of 250ms.
If you need tight synchronisation between printf and output then you should use semihosting. Semihosting uses a breakpoint and hold the target till the info is taken by the host.
You are facing two different things here:
1) How printf in newlib is working
2) How EBmonitor is working
1) printf doesn not always flush out everything right away. But if you have a newline then most likely it will flush the line. This depends how the buffering is set.
2) EBmonitor normally stops when the debugger stops and will poll the pipe on a live time ticker. event.
If you turn on "High-performance" it will poll te pipe constantly instead of using the live time ticker.
The latest consumes more bandwidth of the interface.
With "High-performance" EBmonitor is still paused on debugger stop but you have more chance that it has pulled the data before it stops.
Normally when you are using printf you won't notice a time difference of 250ms.
If you need tight synchronisation between printf and output then you should use semihosting. Semihosting uses a breakpoint and hold the target till the info is taken by the host.