in SRAM direkt schreiben

Gast #105267
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
Gast #105270
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...
Gast #105273
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren