This Ardunio project reads location data from a GPS module and writes waypoints to a GPX file on a MicroSD card.
This parses NMEA messages sent over a serial channel at 9600 bps. I've configured the NEO-7M to send out updates in low power mode at a rate of 1 Hz. It looks for GPRMC messages to get the lat/lon and date/time, and GPGSA messages to get the PDOP (position degree of precision) / HDOP (horizontal degree of precision) / VDOP (vertical degree of precision).
Once it has this info it creates a new file on the SD card, with the filename based on the date/time as DDHHMMSS.GPX, and starts writing GPX trkpt elements.
It was initially developed for the MSP430 microcontroller but the limited SRAM caused me to port it over to Arduino.
Since my GPS module/antenna (a uBlox NEO-7M) gets horrible reception indoors, I had to do most of my development and testing outside, so I set up a workstation on my balcony.
This was prototype #2 - switched to an Ardweeny on a breadboard instead of using a full Arduino.
This was prototype #3 - 3xAAA batteries for power, the Ardweeny and MicroSD card adapter (all soldered up), and the GPS module.
Prototype #3 but all taped up in a compact-ish package. SNES cart for scale. Weighs in at 85g or so, with 35g of that being the batteries.