static variablen vermeiden?

OP #1070660
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
Gast #1070684
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.
OP #1070689
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!
Gast #1070893
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren