Tabelle ins RAM

Gast #134540
Guten Tag!

Habe eine allgemeine Frage! Ich möchte gerne in Assembler im Programm
eine Tabelle mit Konstanten definieren, etwa 200 Werte. Diese Werte
sind  ja dann im Datenspeicher vom AVR. Nun möchte ich all diese Werte
einmal während des Programm-Ablaufes ins RAM laden und mit den
Konstanten arbeiten, sie laden und evtl. ändern und wieder ins RAM
zurück speichern.
Wie kriegt man sowas am besten auf die Reihe? Vorallem möchte ich gerne
wild, nicht der Reihe nach auf die Werte zugreiffen. Das heisst im
Programmablauf möchte ich z.B. die Konstante Nr. 120 im RAM laden,
verändern un wieder an ihrem Platz zurückspeichern.
Grüesse, Hans.
Gast #134542
Danke für die Antwort!
Wenn die Konstanten im Ram sind werde ich wohl so operieren, laden
ändern und wieder zurück ins RAM.
Aber wie kriege ich die Werte vom Datenspeicher elegant ins RAM?
Gast #134543
Hi...

Du kannst keine "Konstanten" ändern...
Denn dann sind es ja bereits "Variable"... ;-D

Zu Programmbeginn in einer Schleife die gesamte Tabelle mittels LPM
r0,z+ und st y+,r0 aus dem Flash ins SRAM übertragen. Dann nur noch
SRAM-Zugriffe per LD/ST, LDS/STS, LDD/STD...

Frohen Rest vom Fest...
...HanneS...
Gast #134544
Das, was Hannes grad gesagt hat. Das mit den 200-mal ist etwas Quick and
Dirty, aber solange du nicht mehr als 255x das machst geht das.. sonst
noch nen high-Byte Vergleich.

LDI yl, low(wohin)
LDI yh, high(wohin)
LDI zl, low(woher*2)
LDI zh, high(woher*2)

Label1:
 CPI yl, low(wohin+200)
 BREQ Label2
 LPM r16, z+
 ST y+, r16
 RJMP Label1

Label2:
 ....

dave
Gast #134546
@dave:

bin grad an ähnlicher Aufgabe dran und mich interessiert, warum das
"woher" mit 2 multipliziert ist.......
>LDI zl, low(woher*2)
>LDI zh, high(woher*2)

danke
nilspeter
Gast #134547
Weil der Programmspeicher in 16-Bit-Worten organisiert sind, d.h. das
Label verweist auf die Wortnummer z.B. $40. In diesem Wort befinden
sich also die Bytes $80 und $81. Für den byteweisen Zugriff mit LPM muß
also das Label mit 2 multipliziert werden.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.