Forum: Mikrocontroller und Digitale Elektronik Tabellen in SRAM


von Alex (Gast)


Lesenswert?

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

von Rufus T. Firefly (Gast)


Lesenswert?

Wenn die Tabelle 16-Bit-Werte enthält, dann ist alle zwei Bytes ein
neuer Wert darin zu finden. Klar?

von AxelR. (Gast)


Lesenswert?

Weil die Tabelle im Flash wortweise organisiert ist.
Im SRAM siehts doch anders aus, oder?
AxelR.

von Rufus T. Firefly (Gast)


Lesenswert?

Nö.

von Christof Krüger (Gast)


Lesenswert?

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.

von mmerten (Gast)


Lesenswert?

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.

von ThoWi (Gast)


Lesenswert?

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

von AxelR. (Gast)


Lesenswert?

@Alex
kannst ja die Frage vielleicht nochmal spezifizieren:
Tabelle im SRAM oder FLASH?
LPM-Befehl?

Gruß nochmals an alle
AxelR.

von Alex (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.