The GPS parsing function has a 2 second update rate on the serial port, but after running a while instead of updating every 2 seconds it starts updating constantly. From what I can tell, it's because the variable timer (at line 97 in parsing). is set to unsigned 16 bits and it is overflowing:
uint16_t timer = millis();
If I follow what's going on, at 65,536 ms (at just over a minute) the sample rate counter overflows and the 2 second update rate doesn't work. I put a quick patch in and it's working well:
unsigned long timer = millis();
I don't think this is necessarily a great solution but it does push out the problem quite a bit further (millis() overflows at 52 days). Basically, I think that the data type of "timer" needs to same as the return value of millis() which looks like it's an unsigned long value.