EEPROM u./o. Flash

Gast #57346
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
Gast #57347
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.
Gast #57348
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?
Gast #57349
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

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.