GPS EM-406 example

This is a good example of software serial I/O. I did spot something potentially very inefficient:

for (int i=0;i<strlen(messageline);i++)

this causes strlen() to be called on each iteration, counting how many characters there are in the string. If the string is very short, it does not matter, much, but as the string gets longer and longer, the amount of CPU time consumed by the loop goes up as the square of the number of characters. This is because there are N characters, each strlen takes order(N) time, and there are N loops, resulting in order(N*N). Instead, I would recommend this:

for (int i=0; messageline != '\0'; i++)