Forum: Mikrocontroller und Digitale Elektronik EEPROM u./o. Flash


von Didi Röhm (Gast)


Lesenswert?

Hallo mal!
Bin absoluter Anfänger und setze mich erstmals mit MC-Programmierung
auseinander. Deshalb versuch ich erst mal alles zu lesen und zu
kapieren,
was ich kriegen kann.
Bisher dachte ich, im Flash wird der Programmcode beim Programmieren -
und nur dann - reingeschrieben, der SRAM dient als flüchtiger
Datenspeicher und das EEPROM als nichtflüchtiger Speicher, für Sachen,
die halt bei Stromausfall erhalten bleiben sollen. Jetzt hab ich mir
das "Heizungsprogramm" aus dem Forum von Ingo B. mal angesehen und
festgestellt, dass dort sowohl ins EEPROM als auch in den Flash
geschrieben wird.
1. Liege ich noch richtig mit meiner Annahme, welcher Speicher wofür
ist.
2. kann ich den Flashspeicher tatsächlich aus dem Programm ändern.
3. wann verwende ich sinnvollerweise den Flashspeicher, wann das
EEPROM

Wär nett, wenn mir jemand auf die Sprünge helfen könnte.

Bid denn!
Didi

von Jim (Gast)


Lesenswert?

Hallo, Didi,

Du kannst in der Tat Flash auch aus dem Programm heraus ändern.
Der wesentliche Unterschied aus Softwaresicht zwischen EEPROM und
FlashROM ist der, dass Du EEPROMS speicherzellenweise ansteuern
kannst/musst und FlashROMS nur blockweise, also ganze Bereiche auf
einmal, welche je nach Baustein unterschiedlich groß sind.

von Didi Röhm (Gast)


Lesenswert?

Hallo nochmal!

Danke Jim, für die kurz gefasste und klare Antwort.
Eigentlich ist die Antwort ganz plausibel, deckt sich aber nicht mit
dem, was ich im Quellcode der Heizungssteuerung sehe. Dort werden
beide Speicher fast gleich verwendet mit einem kleinen Unterschied.

Codeauszug:
(aus dem Zusammenhang genommen, aber zu diesem Zweck erlaubt)

typedef eeprom struct
{
  unsigned int Zeit;
  unsigned char Mode;
} struct_daten;

eeprom struct_daten Timer[65];
flash unsigned char Leds[3] = { 0x04, 0x08, 0x10 };
flash signed int   KesselHysterese = 50;
eeprom unsigned char ZeigerRingspeicher;

Daraus schliesse ich, dass das FlashROM stets vorinitialisiert werden
muß, das EEPROM nicht. Oder war die Antwort genau so gemeint?

von Frank Linde (Gast)


Lesenswert?

Hallo Didi,

man kann den internen Flash-Speicher vieler AVR-Controller nur während
der Programmierung verändern. Die neueren ATmega-Typen unterstützen
dagegen einen Modus, in dem aus dem Programm heraus der Flash-Speicher
beschrieben werden kann. Dazu ist jedoch ein spezielles Verfahren
einzuhalten. In der Regel legen C-Compiler im Flash deshalb nur
Konstanten ab, keine Variablen. Ob und ggf. welche C-Compiler den
schreibenden Zugriff auf Flashspeicher über Bibliotheksroutinen
unterstützen, entzieht sich meiner Kenntnis.

Auf das EEPROM kann aus dem Programm heraus bei allen AVR-Controllern
sowohl schreibend als auch lesend zugegriffen werden.

Ausführliche Erläuterungen zu den Zugriffsverfahren mit ihren
Besonderheiten findest Du in den Datenblättern der ATmega-Typen.

Gruß, Frank

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.