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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.