The PSTR macro just makes the string residing in flash by adding an attribute.

An ordinary string resides in SRAM to which it is copied by the startup code (from flash). Due to AVRs harvard architecture, one needs a was to specify where the string is located. In avr-gcc, this is done by means of sections. Data in sram belongs to section ".data", whilst data in the flash is contained in section ".progmem" (Code in section ".text" or ".bootloader").

For a string in flash an attribute, namely the section attribute, is used to attach the section. Note that this is just a shortcoming of gcc. The proper was of doing this should be to introduce qualifiers. However, supplying GCC with new qualifiers is *very* painful and error prune...

I am not familiar to CodeVision. Maybe, in that compiler there exists a qualifier for that or some other way. Just browse its manual.

An other way could be to work with virtual addresses. (This is the way binutils copes with harvard).

With tandem implemtation I meant an implementation of 2 SW UARTS that use the same timer. IMHO ATmega8's Timer0 is not very well suited for a SW UART implementation. Using Timer1 for both UARTs is a challenge.

The very problem is to sample the incoming data.