Forum: Mikrocontroller und Digitale Elektronik Habe ich PROGMEM verstanden


von Markus (Gast)


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ß

von Oliver (Gast)


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

von Markus (Gast)


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!

von Cyblord -. (cyblord)


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.

von Max B. (theeye)


Lesenswert?

cyblord ---- schrieb:
> 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.

Super Anmerkung, hatte ich so noch gar nicht gesehen.

Gruß Max

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.