AVR-Tutorial: Unterschied Adressierung

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

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.