mikrocontroller.net

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


Autor: Didi Röhm (Gast)
Datum:

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

Autor: Jim (Gast)
Datum:

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

Autor: Didi Röhm (Gast)
Datum:

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

Autor: Frank Linde (Gast)
Datum:

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

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.