So basically, I want to retrieve the strings that are in the Flash memory, but the code above is not working. It prints random characters. The weiredest part is that if I hardcode the "route" var with 0 or 1 like this in the GetStopName function:

This is since a couple of Versions of the Toolchain, this "type" declaration marked as "Depricated". The reason is, that the GNU-C/C++ Compiler does'nt supports memory attribute on a type definitions. The recommended usage is, to use the attribute on the variable instead of the type definition. The explain and further programming of attribute are found here:http://www.codeforge.com/article/41705 .

if you define a uint8_t array of values, you need to declare them as const instead static.

The compiler does'nt need to know what memory segment the pointer of str points, just the address is needed. The access to the program memory do the pgm_read_byte (str) function for us. This need just the address and assume, that the memory is the program space instead data segment.The document from Dean Camera describe further details about the progmem handling.

bye the way, the depricated SIGNAL() function for ISR callbacks are also describted by Dean Camera and i would recomment his "actual" Documentation of all the hints about the newer toolchain and recommended programming.