Forum: Mikrocontroller und Digitale Elektronik in SRAM direkt schreiben


von olli (Gast)


Lesenswert?

Habe das Problem das ich eine kleine Datemenge sortieren muss. Nur 4
"Arrays" a 2 Bytes. Müsste also einen festen Speicherplatz von 8
BYtes nutzen.


Folgende Situation: ich pop 3 Byte an Daten vom Stack. Das erste Byte
bestimmt die Position ("sortieren"). Die anderen 2 sind Timerwerte
und lese ich zunächst in jeweils ein Register ein (eins für Low und
eins fürs High Byte).

Wie schreibe ich nun diese Bytes an eine für mich nutzbare Adresse
(nutze auch Stack, den ich mit SP, RAMEND initialsiert habe), so dass
alle 8 Bytes hintereinander stehen. Und wie kann ich diese 8 BYtes dann
wieder sukzessive auslesen und ausgeben.

Ich weiß das alles in der Doku steht, aber leider verstehe ich das
nicht ganz.

MfG.Olli

P.S nutze den 4433

von Heinz (Gast)


Lesenswert?

STS/LDS?

von olli (Gast)


Lesenswert?

Danke für die ausfürhliche Antwort

von olli (Gast)


Lesenswert?

Welchen Speicherbereich kann ich nutzen? (ohne mit dem Stack in
Berührung zu kommen, mit dem ich max 12 Byte speicher)

Inder Doku steht als BEispiel für das Store Indirect eine Speicherplatz
von $0060. (= Dezimal 96) Ist das auch für meinen 4433 sinnvoll? Dann
könnte ich ja im Low Byte 60 bis 68 nutzen.

Fürs lesen nehme ich dann wahrscheinlich indirekt Adressierung. Ist
wahrscheinlich schöner...

von olli (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist mein Codeschnipsel: leider funktioniert da irgendwas nicht. Er
macht eine Endlosschleife.

Vielleicht erbramt sich einer und schaut sich das mal. Es ist ziemlich
einfacher Code..

von thkais (Gast)


Lesenswert?

Hast Du Deinen Code schonmal durch den Simulator gejagt?

von Heinz (Gast)


Lesenswert?

Hi,

du bedankst dich für meine ausführliche Antwort (STS/LDS). Nix zu
danken, Kundendienst.

Du fragst nach dem zu benutzenden Speicherbereich. Nunja, sagen wir mal
Adressbereich, denn da gibt es nicht nur Speicher:

- 0-31 ($00-$1f): 32 Register,
- 32-95 ($20-$5f): 64 I/O-Adressen,
- ab 96 ($60): SRAM

Deinen Stackpointer initialisierst du auf die letzte SRAM-Adresse. Er
wirkt decrementierend, zählt bei Anwachsen des Stacks also herunter.
Wie weit, hängt von deinem Programm ab. Frei nutzen kannst du den
Adressbereich zwischen SRAM-Beginn und maximalem Stackbedarf, also die
Adressen ab $60.

Aber aufgepasst, das gilt nicht für alle AVRs, es gibt welche, die
haben so viel I/O-Bereich, dass der RAM-Anfang nach oben verschoben
wurde. Du wirst also schon mal einen Blick ins Datenblatt riskieren
müssen. Aber beim 4433 fängt SRAM definitiv bei $60 an.

Übrigens habe ich mir dein Programm nicht näher betrachtet da ich beim
ersten flüchtigen Hinsehen wichtige Teile vermisst habe. Vielleicht
solltest du dir erst mal Programme anderer Beiträge ansehen, z.B. aus
der Codesammlung. Und dann auch mal den Simulator bemühen, der ist
(Fehlermeldungen betreffend) recht geschwätzig (hilfreich).

Viel Erfolg!

MfG, Heinz

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.