The problem I have is that Putchar() only triggers the DMA when the outgoing DMA buffer is full. The last bit of the string is correctly written to the ping pong output buffer but because it never fills the last few bytes are never sent.
I've fixed it by adding a FlushOutput() function which forces the buffer to be sent but I can't help but think that this effect should cause problems elsewhere but can't see why it hasn't been??
What am I missing?

Edit - I'm being dim again, it's because my string doesn't end with a '\n' (newline) - flush removed and newline added!