The three setvbuf calls you mention are meant to set all standard streams as unbuffered; however:
- the setvbuf call on stdin is really useless, as stdin is a readonly stream.
- the default setup for stderr is already unbuffered, so this call is usualy also useless
- so only the stdout call will change anything, as, by default, stdout is line buffered
- by default printf only send characters on the serial line when it reach an end-of-line character (“\n”)
- including “setvbuf(stdout, NULL, _IONBF, 0);” in your init routine will effectively get characters out as soon as possible