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
Von wo bis wo Du den Ram beschreiben darfst, findest Du im jeweiligem Datenblatt Deines µCs. Beim ATmega8 ist es z.B. ab 0x0060. Es ist natürlich ein bisschen aufwendiger in den Speicher zu schreiben/lesen als nur mit Registern zu arbeiten. Gruß, Daniel
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.
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.
> 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
> 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.
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.