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
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...
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.
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!
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.