mkwired:
Do you really need to store data in FLASH? Doing so isn't "free." You will pay a performance penalty in terms of the time it takes to read from FLASH as well as the complexity in terms of the code necessary to access FLASH.
It's not that bad. In terms of time, the processor can read flash memory quickly. After all, it is getting instructions from it at the rate of a byte every clock cycle. Compare:
Flash "strcpy":
000000be <strcpy_P>:
be: fb 01 movw r30, r22
c0: dc 01 movw r26, r24
c2: 05 90 lpm r0, Z+
c4: 0d 92 st X+, r0
c6: 00 20 and r0, r0
c8: e1 f7 brne .-8 ; 0xc2 <strcpy_P+0x4>
ca: 08 95 ret
To normal "strcpy":
000000cc <strcpy>:
cc: fb 01 movw r30, r22
ce: dc 01 movw r26, r24
d0: 01 90 ld r0, Z+
d2: 0d 92 st X+, r0
d4: 00 20 and r0, r0
d6: e1 f7 brne .-8 ; 0xd0 <strcpy+0x4>
d8: 08 95 ret
The only difference is changing "ld" to "lpm". The LPM instruction takes 3 clock cycles compared to 2 for LD. So, you lose one clock cycle (62.5 nS) per byte copied.