www.mikrocontroller.net

Forum: Compiler & IDEs static variablen vermeiden?


Autor: Felix Nachname (time2ride)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich habe in einem aktuellen Projekt einige als "static" deklarierte 
Variablen in Unterfunktionen.
Zufällig bin ich heute über die max. Schreibzyklen eines uC's gestoßen 
(ca. 10000 laut Datenblatt, ich weis: praktisch jedoch viel mehr, bla 
bla)

Jetzt zur Frage:
Sollte man nicht static Variablen, deren Wert sich oft (ich meine 
wirklich oft...)  ändert nicht lieber als Globale Variable definieren, 
dass sie im RAM verwaltet werden können?
Denn was ich so gelesen habe werden static Variablen ja IMMER im 
Programmspeicher abgelegt, der ja wie oben schon erwähnt eine begrenzte 
Wiederbeschreibbarkeit hat im gegensatz zum RAM. Oder kann man dem 
Compiler sagen, er soll eine static Variable im RAM verwalten?

Grüße,
Felix

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer sagt, daß static Variablen im Flashspeicher abgelegt werden?

Autor: Felix Nachname (time2ride)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie gesagt: Soweit ich weis... (Aus dem GCC Tutorial hier) Punkt 
"Programmspeicher (Flash)"
Das ist genaugenommen auch ein Teil meiner Frage OB static Variablen 
wirklich IMMER im Programmspeicher abgelegt werden.
Wenn nicht, sollte man das im Tutorial ändern...

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meinst Du das hier?
static /*const*/ uint8_t pgmTestByteLocal PROGMEM = 0x55;
static /*const*/ char pgmTestStringLocal[] PROGMEM = "im Flash";

Dann beachte, daß hier am Ende ein PROGMEM steht. Ohne dieses sollte die 
Variable eigentlich nicht im Flash landen.

static steht doch eigentlich nur dafür, daß bei wiederholt aufgerufenen 
Funktionen der Wert zwischen den Aufrufen erhalten bleibt. static 
Variablen werden also nicht auf dem Stack abgelegt, sondern an einer 
klar definierten Stelle im RAM.

Autor: Felix Nachname (time2ride)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh ja, das meine ich.
Sorry, ich habe nur den Text gelessen, den Code überhaupt nicht 
angeschaut aber dann ist es klar. Hätte mich auch gewundert.

Fazit:
static Variablen werden auch auch im RAM abgelegt. Es sei denn, man gibt 
explizit an, dass sie im Speicher sein sollen (->PROGMEM).

Danke Dirk!

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>static Variablen werden auch auch im RAM abgelegt. Es sei denn, man gibt
>explizit an, dass sie im Speicher sein sollen (->PROGMEM).

Wobei letzere beim Flashen angelegt werden, und aus dem Programm heraus 
nur gelesen, aber nicht geschrieben werden können. Das sind dann keine 
Variablen, sondern Konstanten.

Oliver

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.