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.
Adresse_von_Konstante_(Nummer)=StartAdresse_von_Konstante_0 + Nummer Diese list du und schreibst die danach wieder. Wo ist da das Problem ?
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?
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...
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
@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
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.
@philipp: danke...habs verstanden...und das RAM in 8-Bit-Worten.... alles klar gruss np
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.