Habe ich PROGMEM verstanden

Gast #3805201
Lesenswert?

Hallo,

ich überlege mir gerade wofür die Deklaration von Konstanten mit dem 
Zusatz "PROGMEM" gut ist, bzw. was sie bewirkt.
Da ja erst mal alle Konstanten und Variablen auf jeden Fall einen Platz 
im Programmspeicher haben, sonst kennt sie der Controller ja nicht, sehe 
ich nur die Wahrscheinlichkeit, dass sie beim Ausführen des Programms 
nicht wie andere Variablen ( und Konstanten ?) keinen Platz im RAM 
reserviert bekommen.
Alle anderen Variablen und auch Konstanten bekommen beim Start der 
Programms Platz im RAM.
Und der Zusatz "const" gibt dem Compiler die Möglichkeit einen Fehler 
auszugeben falls ich doch irgendwo im Programm auf die Idee komme dieser 
Konstante etwas zuzuweisen.
Um Platz im RAM zu sparen müsste man dann aber eigentlich jeder 
Konstante den Zusatz "PROGMEM" verpassen. Wo macht es Sinn dies nicht zu 
tun den eigentlich will und darf ich sie ja eh nicht ändern?

Danke und Gruß
Gast #3805217
Lesenswert?

Typische Anwendungen für PROGMEM sind Strings (Menüausgabe), größere 
Lookup-Tables und ähnliche statische Dinge, die einen großen Teil des 
verfügbaren RAMs fressen würden.

Bei Konstanten, die gerade mal ein Byte belegen, macht man sich den 
Gedanken gar nicht.

Im Prinzip ist es eine Abwägung: Zugriffe auf Konstanten im PROGMEM 
brauchen einige Maschinenzyklen mehr als auf solche im RAM. Dafür 
verbrauchen Konstanten im Flash halt kein RAM.

Entscheide selbst...
Gast #3805223
Lesenswert?

Oliver schrieb:

> Im Prinzip ist es eine Abwägung: Zugriffe auf Konstanten im PROGMEM
> brauchen einige Maschinenzyklen mehr als auf solche im RAM. Dafür
> verbrauchen Konstanten im Flash halt kein RAM.

Ja, stimmt, die Zugriffszeit hab ich ganz vergessen. Danke für den 
Hinweis!
#3805233
Lesenswert?

Einfache Konstanten sind in den meisten Fällen mit #defines gut zu 
erschlagen. Was dann weder FLASH noch RAM noch extra Zugriffszeit 
kostet.

Konstanten im Flash machen, außer für Strings, auch noch für Dinge wie 
z.B. Default Werte Sinn. Hat man ein Gerät mit veränderbaren 
Einstellungen und will eine Default Einstellung vorhalten, die bei 
Bedarf geladen wird, kann diese gut im Flash abgelegt werden.

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