static variablen vermeiden?

OP #1070660
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
OP #1070680
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...
Gast #1070684
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
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
>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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.