Forum: Compiler & IDEs Variablen ablegen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.