It's been quite a long time since we first posted code for 'Abstract USART'. We've improved it considerably in the meantime, so we thought we'd share it with you now.

We now call it simply 'stdio_usart'. Its purpose is to have a serial terminal ready to go when main() begins, enabling the application to immediately use stdio functions, such as printf() and scanf(), without having to first write code for intitializing the usart, buffering characters, handling interrupts & etc. Just #include "stdio_usart.h" and you're ready to go.

Features:

The default buffer sizes are 16 bytes each. You can choose smaller or larger buffer sizes separately, using...
#define STD_USART_INSIZE X
#define STD_USART_OUTSIZE Y

The default baud rate is 9600, which can be changed simply by defining BAUD. The frame format is 8 N 1.

Example:

#define BAUD 38400
#define STD_USART_INSIZE 32
#define STD_USART_OUTSIZE 128
#include "stdio_usart.h"
int main{

	sei(); // interrupts need to be enabled at main()

	puts("Hello, world!");
	printf("This AVRs clock rate is %ld cycles per second",F_CPU);
	return 0;
}

Get it here.