allgemeine Frage zur LPM Adressierung

OP #445144
Lesenswert?

Hallo,
habe endlich mein Prog zum laufen gebracht. Geschieben mit AVR 
Studio4.12. Das Programm beinhaltet 63 16Bit Konstanten, die ich im 
Programmspeicher folgendermaßen abgelegt habe:

  .org 0x0F00
  .dw 0x1122,0x1159,0x1190,0x11C7,0x11FE,0x1235,0x126C,0x12A2
  .dw 0x12D9,0x1310,0x1347,0x137E,0x13B5,0x13EC,0x1422,0x1459
  .dw 0x1490,0x14C7,0x14FE,0x1535,0x156C,0x15A2,0x15D9,0x1610
  .dw 0x1647,0x167E,0x16B5,0x16EC,0x1722,0x1759,0x1790,0x17C7
  .dw 0x17FE,0x1835,0x186C,0x18A2,0x18D9,0x1910,0x1947,0x197E
  .dw 0x19B5,0x19EC,0x1A22,0x1A59,0x1A90,0x1AC7,0x1AFE,0x1B35
  .dw 0x1B6C,0x1BA2,0x1BD9,0x1C10,0x1C47,0x1C7E,0x1CB5,0x1CEC
  .dw 0x1D22,0x1D59,0x1D90,0x1DC7,0x1DFE,0x1E35,0x1E6C

adressiert wird das ganze mit dem Z-Pointer. Ausgelesen mit LPM. Die 
Adresse vom Z-Low-Byte muss verdoppelt werden, da pro Adresse zwei 8-Bit 
Werte abgespeichert wurden. Nun zu meiner Frage:
"Wieso muss ich für das High-Byte des Z-Pointers die Adresse 
verdoppeln?"
hab es durch probieren herausgefunden. Aber verstehen tuh ich das nicht!
Gast #445155
Lesenswert?

Der Programmspeicher (Flash) des AVR ist wortweise
also in 16-Bit Schritten organisiert.
Der LPM-Befehl spricht den Speicher aber byteweise an.
Deshalb muss man die Adressen verdoppeln.
Immer wieder eine beliebte Fehlerquelle bei der Programmierung. :-)


MFG Willi



Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren