Um das alles mal zusammenzufassen:
Es gibt drei Arten von Speicher im AVR, Flash, RAM und EEPROM.
Im Flash steht primär der Programmcode. AVRs können Programmcode nur
aus diesem Speicher heraus ausführen. Dieser Speicher kann auch für
Daten genutzt werden, aber diese sind dann nur lesbar (schreiben geht
zwar bei den meisten AVRs auch, aber das ist etwas umständlicher,
langsam, und die Zahl an Schreibvorgängen ist stark begrenzt). Das
eignet sich für fixe Tabellen und Konstanten. Der Flash ist bei AVRs
immer der größte Speicher. Der Zugriff darauf erfolgt in Assembler mit
lpm bzw. elpm.
RAM ist der eigentliche Datenspeicher. Er kann sehr schnell und
beliebig oft gelesen und geschrieben werden. Er verliert allerdings
seinen Inhalt, wenn die Stromversorgung abgestellt wird. Er kann mit
ld, ldd, lds gelesen und mit st, std, sts geschrieben werden.
EEPROM ist der Speicher, um sich Daten über das Aus-/Einschalten hinweg
zu merken. Er ist aber relativ langsam, vor allem beim Schreiben, und
auch bei ihm ist die Zahl an Schreibzyklen begrenzt.
Der Zugriff auf diesen erfolgt über I/O-Register und ggf. Interrupts
(wird ausgelöst, wenn ein Schreibzugiff fertig ist).