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!
etwas genauer gesagt. Damit die richtigen Werte ausgelesen werden, ist ZH=0x1E. Dabei hab ich die Tabelle doch bei der Adresse 0x0F00 angefangen. Wieso funktioniert es nicht, wenn ich ZH=0x0F setze? Ich weiss nicht wo mein Denkfehler ist.
Gast
#445155
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
aaaaaah. da sich der Adressbereich des LBs verdoppelt, verdoppelt sich natürlich auch der Adressbereich des HBs. COOL Danke!!! Jetzt kann ich gut schlafen.