Forum: Compiler & IDEs Variablen ablegen


von Norbert (Gast)


Lesenswert?

Mir fällt auf, daß der Compiler die Variablen mal im
Registersatz und mal im SRAM ablegt.

Nach welchen Kriterien macht der das?

Was kann ich tun, damit Variable ins EEPROM gespeichert werden?

Norbert

von Peter (Gast)


Lesenswert?

Du hast noch den Stack als Ablagemöglichkeit vergessen.

> Nach welchen Kriterien macht der das?

Nach bestem Wissen und Gewissen ;-)

> Was kann ich tun, damit Variable ins EEPROM gespeichert werden?

Am besten liest du dir diese Doku mal komplett durch, da werden 
eigentlich alle deine Fragen gut beantwortet:

http://www.avrfreaks.net/AVRGCC/Download/haraleit.pdf

Gruss,

Peter

von Peter (Gast)


Lesenswert?

fast hätte ich es vergessen, die Beispiele beziehen sich auf den avrgcc. 
Für andere Compiler musst du dir deren Dokumentation anschauen.

von Jonas Diemer (Gast)


Lesenswert?

um genau zu sein: der stack liegt im SRAM... :-)

von Peter (Gast)


Lesenswert?

Hat jemand das Gegenteil behauptet?

von Jonas Diemer (Gast)


Lesenswert?

"Du hast noch den Stack als Ablagemöglichkeit vergessen."

nein, hat er nicht, denn er hat das sram erwähnt. :-)


ich weiß, man kann auch pingelig sein.

von Norbert (Gast)


Lesenswert?

@Peter:

Danke für den Link, damit werd' ich wohl weiterkommen.
Vielleicht muss ich ja von CodeVision auf AVR-GCC umsteigen.

Gruß   Norbert

von Peter (Gast)


Lesenswert?

Es gibt aber noch den Unterschied zwischen Software-Stack und 
Hardware-Stack.

Der Software-Stack liegt im SRAM, der andere nicht.

Und es gibt auch Compiler (z.B. der ICCtiny von Imagecraft), die legen 
Variable auf dem Hardware-Stack ab.

Gruss,

Peter

von Jonas Diemer (Gast)


Lesenswert?

ok, 1:0 für dich :-)

von Peter D. (peda)


Lesenswert?

Hallo Peter,

der Hardwarestack kann ausschließlich die Rückkehradressen speichern 
aber niemals Variablen !

Alle AVR mit Hardwarestack können nämlich kein PUSH / POP.


Peter D.

von Jonas Diemer (Gast)


Lesenswert?

jeah, stimmt eigentlich! :-) dann war ich ja doch nicht so doof...

von Peter ohne D (Gast)


Lesenswert?

> der Hardwarestack kann ausschließlich die Rückkehradressen speichern aber 
niemals Variablen !

> Alle AVR mit Hardwarestack können nämlich kein PUSH / POP.

Stimmt, du hast Recht. Da hab ich was durcheinandergeschmissen, mit 
diesen Hardware-Stack-Typen hatte ich mich bislang noch nicht so genau 
befasst.
Aber es ist schon ein Unterschied, wenn man eine Variable auf den 
(Software-)Stack pusht oder an einer festen Stelle im SRAM speichert, 
auch wenn sie de fakto beide Male im SRAM landet. Das hatte ich eher 
gemeint. Und es gibt auch C-Compiler, die beide Varianten auch nutzen, 
je nachdem, was für die Optimierung des Programms im Vorteil ist.

Gruss,

Peter

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.