mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PROGMEM, EEMEM?


Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Timo P (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Michael Buesch (mb_)
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timo P schrieb:
> Das ist ja doof!

Da musst du dich bei Atmel beschweren!

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bis man 32k Flash sinnvoll vollprogrammiert hat, hat man schon einige 
Zeit zu tun.

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
den atmega168 und 328 kennst du aber?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.