www.mikrocontroller.net

Forum: Compiler & IDEs Variablen ablegen


Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

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

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
um genau zu sein: der stack liegt im SRAM... :-)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat jemand das Gegenteil behauptet?

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter:

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

Gruß   Norbert

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, 1:0 für dich :-)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jonas Diemer (Gast)
Datum:

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

Autor: Peter ohne D (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.