Forum: Mikrocontroller und Digitale Elektronik PROGMEM, EEMEM?


von Anfänger (Gast)


Lesenswert?

Hallo!

Mittlerweile weiß ich, was der EEProm für ein Speicher ist. Dort kann 
ich variablen erzeugen, oder Absolut addressierte Register permanent, 
also auch nach Reset noch existent mit Daten beschreiben.

Was aber ist PROGMEM? Wo genau liegt der Unterschied?

Wann soll ich PROGMEM und wann EEPROM-Speicher nutzen?

Danke für kurze Hilfestellung

von Stefan B. (stefan) Benutzerseite


Lesenswert?

PROGMEM - also den Flash Speicher z.B. eines AVR - kannst du zur 
Laufzeit nicht verändern, nur zur Kompilierzeit. Es eignet sich z.B. für 
unveränderliche Texte oder Tabellen.

von Timo P (Gast)


Lesenswert?

Das ist ja doof!

Dachte ich könnte während der Laufzeit ähnlich wie beim EEPROM die Werte 
ändern. Schade. Naja konstante Werte/Größen/Strings kann man ja dann...

von Michael B. (mb_)


Lesenswert?

Natürlich kann man progmem prinzipiell auch zur Laufzeit verändern. Aber 
nur recht umständlich seitenweise.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Der Vollständligkeit halber: Es gibt einen Weg, der aber bestimmte 
Randbedingungen / Einschränkungen hat.

Ein Bootloader kann Flash Speicher beschreiben.

Wenn also dein eigentliches Programm in den Bootloaderbereich passt, 
könntest du von dort aus z.B. den restlichen Flashbereich als permanente 
Datenablage nutzen.

von Karl H. (kbuchegg)


Lesenswert?

Timo P schrieb:
> Das ist ja doof!

Nicht wirklich.
Wenn man mit allen Speichertypen das gleiche machen könnte, wäre es 
reichlich sinnlos überhaupt unterschiedliche Speichertypen zu haben

von Klaus W. (mfgkw)


Lesenswert?

Timo P schrieb:
> Das ist ja doof!

Da musst du dich bei Atmel beschweren!

von Anfänger (Gast)


Lesenswert?

naja, wenn man kurz vor dem RAM-ENDE steht, und mit der längeren 
zugriffszeit von variablen in der Laufzeit leben kann, könnte man die 
vars halt ins eeprom oder ins progmem auslagern, ohne einen anderen 
Controller zu nutzen. Ich schließe mich also dem "ist ja doof" an :)

Problem ist, dass wir hier einen kleinen (Baugröße) Controller nutzen 
müssen, der aber sehr viel speicher zur Verfügung stellt. Speicher für 
code und RAM. Angenommen wir nutzen hier einen ATMEGA8, könnte man 
seinen Bruder nehmen, der 32 statt 8 an speicher hat. Was tun, wenn dies 
nicht ausreicht?

von spess53 (Gast)


Lesenswert?

Hi

>Der Vollständligkeit halber: Es gibt einen Weg, der aber bestimmte
>Randbedingungen / Einschränkungen hat.

>Ein Bootloader kann Flash Speicher beschreiben.

>Wenn also dein eigentliches Programm in den Bootloaderbereich passt,
>könntest du von dort aus z.B. den restlichen Flashbereich als permanente
>Datenablage nutzen.

Wenn die Bootlockbits unprogrammiert sind, gibt es keine Einschränkungen 
für SPM/(E)LPM.

MfG Spess

von Klaus W. (mfgkw)


Lesenswert?

Du bist sicher, daß du mehr als 32 k Flash brauchst?

Dann könnte man entweder auf noch größere AVR ausweichen
(mit mehr Beinchen dann halt), oder externes Flash anschließen.

von Anfänger (Gast)


Lesenswert?

"mehr Beinchen" ist untersagt! Wir müssen sehr klein bauen!

Der Funktionsumfang ist extrem! z.B. gibt es eine Umschaltmöglichkeit 
von Master-Slave, wobei sich die Funktion komplett ändert. Diese 
Umschaltung soll aber nicht beim flashen oder durch Auswahl der 
Hardware, sondern duch den User WÄHREND der Laufzeit vollzogen werden 
können.

Somit haben wir den Anspruch z.B. auf einen ATMEGA128, ABER: wir können 
nur Baugrößen um den ATMEGA8 nutzen :(

Ideen?

von spess53 (Gast)


Lesenswert?

Hi

>Du bist sicher, daß du mehr als 32 k Flash brauchst?

Man will ja auch für die (fernere) Zukunft gewappnet sein.

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Anfänger schrieb:
> naja, wenn man kurz vor dem RAM-ENDE steht, und mit der längeren
> zugriffszeit von variablen in der Laufzeit leben kann, könnte man die
> vars halt ins eeprom oder ins progmem auslagern, ohne einen anderen
> Controller zu nutzen.

Und wenn dann dieses ebenfalls aufgebraucht ist?

> code und RAM. Angenommen wir nutzen hier einen ATMEGA8, könnte man
> seinen Bruder nehmen, der 32 statt 8 an speicher hat.

BIst du sicher, dass du verstanden hast worum es hier überhaupt geht? 
Ein Mega8 hat keine 8k SRAM.

> Was tun, wenn dies
> nicht ausreicht?

Wie gesagt den nächst größeren nehmen.

Allenfalls kann man darüber diskutieren, wie sinnvoll die von Atmel 
vorgegebenen Speichergrößen sind. Es ist ja schliesslich nicht 
gottgegeben, dass ein Mega8 nur 1k SRAM haben darf. Atmel hätte dem ja 
auch 2k spendieren können.

von Karl H. (kbuchegg)


Lesenswert?

Anfänger schrieb:

> Der Funktionsumfang ist extrem! z.B. gibt es eine Umschaltmöglichkeit
> von Master-Slave, wobei sich die Funktion komplett ändert. Diese
> Umschaltung soll aber nicht beim flashen oder durch Auswahl der
> Hardware, sondern duch den User WÄHREND der Laufzeit vollzogen werden
> können.

Und?


In den meisten Fällen besteht gerade bei Programmen von Leuten mit 
weniger als ein paar Jahren Erfahrung ein nicht ganz unerhebliche 
Möglichkeit, durch geschicktere Programmierung einiges an Platz 
einzusparen. Irgendwann ist natürlich immer Schluss, aber ein paar Bytes 
kann man meistens immer noch irgendwo rausholen.

von Klaus W. (mfgkw)


Lesenswert?

Bis man 32k Flash sinnvoll vollprogrammiert hat, hat man schon einige 
Zeit zu tun.

von Sam .. (sam1994)


Lesenswert?

Karl heinz Buchegger schrieb:
> Allenfalls kann man darüber diskutieren, wie sinnvoll die von Atmel
> vorgegebenen Speichergrößen sind. Es ist ja schliesslich nicht
> gottgegeben, dass ein Mega8 nur 1k SRAM haben darf. Atmel hätte dem ja
> auch 2k spendieren können.

Von dem 1KB Ram brauchte ich meistens einen kleinen Bruchteil. Beim 
letzen Profekt brauchte ich ca. 140B. Wenn man mehr braucht sollte man 
halt einen größeren Chip einplanen. Und wenn der zu groß ist eine 
kleinere Bauform wählen. Vielleicht sollte man auch gar keinen AVR 
sondern etwas im 16-32bit Bereich nutzen - die haben meistens mehr Ram.

von ... .. (docean) Benutzerseite


Lesenswert?

den atmega168 und 328 kennst du aber?

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.