Hallo... Was ist nochmal der Grund dafür ldi ZH,high(Tabelle*2) ldi ZL,low (Tabelle*2) das wenn auf Tabellen zugreifen (mit Pointern) möchte der Inhalt mit 2 multipliziert werden muss. Danke für eure Antworten
Wenn die Tabelle 16-Bit-Werte enthält, dann ist alle zwei Bytes ein neuer Wert darin zu finden. Klar?
Weil die Tabelle im Flash wortweise organisiert ist. Im SRAM siehts doch anders aus, oder? AxelR.
Das macht man wohl, wenn "Tabelle" im Flash liegt und mit dem Z-Pointer danach per LPM darauf zugegriffen werden soll, da das Label "Tabelle" die Adresse in 16-Bit words enthält, während LPM die Adresse in Bytes, also 8-Bit words erwartet.
Kommt immer auf den Compiler bzw. Assembler an. Bei Atmel AVR Assembler ist der Programmcounter "WORD" organisiert angelehnt an die Organisation des Progammspeichers. Daher kann auf sind auch alle Labels im .CSEG nur equivalent "gerade Adressen", daher die Multiplikation mit 2. Der LPM Befehl greift ja byteweise auf den Programmspeicher zu. Andere z.b. IAR Assembler verhalten sich da etwas anders, da sind auch Labels auch im .CODE Segment byteweise organisiert.
Hallo, im SRAM werden die Tabellen IMHO schon byteweise abgelegt und verarbeitet. Jedenfalls funtioniert .DSEG tabelle: .byte Länge .CSEG ... ldi ZH,high(Tabelle) ldi ZL,low(Tabelle) bei meinen Programmen und dem Atmel AVR Assembler recht zufriedenstellend und liefert bisher immer die richtigen Ergebnisse. Gruß Thorsten
@Alex kannst ja die Frage vielleicht nochmal spezifizieren: Tabelle im SRAM oder FLASH? LPM-Befehl? Gruß nochmals an alle AxelR.
Ja also ich hab jetzt speziell die Tabelle im Flash gemeint...Danke für die Antworten
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.