Forum: Compiler & IDEs static variablen vermeiden?


von Felix N. (time2ride)


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

von Dirk (Gast)


Lesenswert?

Wer sagt, daß static Variablen im Flashspeicher abgelegt werden?

von Felix N. (time2ride)


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...

von Dirk (Gast)


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.

von Felix N. (time2ride)


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!

von Oliver (Gast)


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

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.