Variablen im Ram?

OP #232320
Lesenswert?

Hallo zusammen,
ich bin grade dabei mir ein wenig das Mikrocontrollern beizubringen
.... als Sprache hab ich veroert Assembler gewählt.

Naja und jetzt hab ich doch glatt mal ne 'Anfänger'-frage....
Ich habe grad eine Anwendung zur Lautstärkereglung und mache grad
Leaning by doing incl. Tial and Error.

Ich 'speichere' meine Variablen (z.B. VOL) zur Zeit in Registern
(R16-R25). Mittlerweile wird der Platz von Registern knapp.

1.Wäre es nicht sinnvoller Varable ins RAM zu schreiben und von dort
auszugeben als in einem Register? Unter dem Gesichtspunkt das man die
register ja eher für sofortige Sachen 'braucht'.

2.Der Stack liegt ja im RAM.... oder?(so les ich das aus dem Tutorial)
In welchen Adressbereich kann ich werte schreiben ohne das ich den
Stack inhalt gefährde....?

Wäre für kleine Hinweise und Tipps sehr dankbar.

MfG
Frank
Gast #232322
Lesenswert?

du setzt den SP ans Ende des Rams, deine Variablen an den Anfang,
steigend. So hast du den max. Platz für den Stack - was aber nicht
heisst, dass die sich nicht in die Quere kommen, Speicherschutz gibt es
nicht. Wenn also dein stack so tief kommt, überschreibt er gnadenlos
Variable.
Adressieren kannst du direkt, also Speicheradresse wird im Befehl
angegeben (lds, sts), oftmals besser geeignet ist die indirekte
Adressierung mit den Indexregistern x,y und z, insbesondere, wenn die
Variable aus mehreren Bytes besteht oder Arrays verwaltet werden. (ld,
ldd, st, std in verschiedenen Varianten.
OP #232323
Lesenswert?

Hallo Daniel,

erstmal danke für Deine Antwort.
Ich wollte mir das Mit dem AVR anhand eines kompletten Projekts
vornehmen.
Bisher benutze ich einen Inkrementalgeber mit Tastfunktion und einen
Volume-Regler (serielle Programmierung) von TI.

Da das ganze ja irgendwann mal ein Vollverstärker werden soll will ich
noch einige Funktionen mehr realisieren.
-Balance Anpassung
-Eingangswahl
-LCD-Anzeige
-Klicki-Bunti Beleuchtungseffekte

Also ne menge firlefanz zum üben :-)

Naja und da werden mir wohl die Register nicht reichen denke ich mal.
Gast #232324
Lesenswert?

> 1.Wäre es nicht sinnvoller Varable ins RAM zu schreiben und von
> dort auszugeben als in einem Register?

Man muß sie halt immer erst ins RAM kopieren und wenn man sie braucht,
denn jegliche Änderung und Verwendung des Wertes kannst du nicht direkt
im RAM, sondern nur in einem Register machen.

> Unter dem Gesichtspunkt das man die register ja eher für sofortige
> Sachen 'braucht'.

Naja, bei 32 Registern braucht man selten alle gleichzeitig. Aber wenn
sie knapp werden, sind natürlich Variablen im RAM eine Möglichkeit.

> 2.Der Stack liegt ja im RAM.... oder?(so les ich das aus dem
> Tutorial)

Ja, außer bei denen, die kein RAM haben.

> In welchen Adressbereich kann ich werte schreiben ohne das ich den
> Stack inhalt gefährde....?

Das kommt drauf an. Üblich ist, den Stack ans Ende zu legen. Wie groß
dein Bereich des RAM ist, den du für Variablen nutzen kannst, hängt
dann aber immer noch davon ab, wie weit der Stack wächst, also von der
maximalen Tiefe der Funktionsaufrufe und der Anzahl an Registern, die
du auf den Stack "push"st.
Frank
Gast #232325
Lesenswert?

> Man muß sie halt immer erst ins RAM kopieren und wenn man sie
> braucht,

... wieder zurückkopieren, ...

> denn jegliche Änderung und Verwendung des Wertes kannst du nicht
> direkt im RAM, sondern nur in einem Register machen.

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