AVR-Tutorial: Unterschied Adressierung
Der Flash-Speicher ist Word-weise organisiert.
Während es keine größeren Probleme bei der SRAM- und EEPROM - Programmierung gibt (Byte-orientiert), stellt sich immer wieder die Frage, warum Adressen im Flash mit zwei multipliziert werden müssen.
Beispiel: .db 0 ; führt zu einem Warning
.db 0,0
Hier ergänzt der Assembler nach der ersten 0 eine weitere 0, um auf geradzahlige Word-Grenzen zu kommen.
Der Assembler des AVR-Studios legt immer den Zeilenanfang einer .db-Definition auf eine Word - Adresse (gerade Byte-Adresse). Wenn man jetzt den Flash - Speicher auslesen möchte, muß man natürlich dann die Markenadresse mit zwei multiplizieren, da die Markenadresse immer auf einer Word - Grenze liegt, um mit
z. B.
LPM R16,Z+ ; ein Byte aus dem Flash auslesen zu können.
Das nachfolgende Byte läßt sich dann, ohne die Word - Grenzen zu beachten, mit z. B.
LPM R16,Z ; auslesen.
Der Zeiger Z wurde in diesem Beispiel nur um eins erhöht und zeigt somit zwischen die Word-Grenzen.