mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM mega8 - Definition von Variablen Schreibzugriff?


Autor: Martin Sch. (msch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich hab mich grad zum ersten mal am lesen/schreiben aus dem/in das 
EEPROM vom ATMega8 probiert.
Ich benutze den Beispielcode aus dem GCC-Tutorial, was auch wunderbar 
funktioniert, nur eins ist mir auch nach längerem Suchen und lesen nicht 
ganz klar:
Ich definiere vor int main()...
die Variablen:
uint8_t eeCodeA EEMEM ;
uint8_t eeCodeB EEMEM ;
uint8_t eeCodeC EEMEM ;
uint8_t eeCodeD EEMEM ;
In der Hauptschleife kommt dann als erstes folgender Code,
um bei leerem EEPROM Standardwerte in selbiges zu schreiben.
//testen, ob werte im eeprom liegen, wenn nicht, standardwerte schreiben
  uart_puts("EEPROM wird gelesen \n");

  #define EEPROM_DEF 0xFF
    

    if ( ( codeA = eeprom_read_byte(&eeCodeA) ) == EEPROM_DEF) 
  {
    uart_puts("EEPROM leer - standardwerte schreiben \n");
        codeA = 1;
    codeB = 7;
    codeC = 5;
    codeD = 2;
    eeprom_write_byte(&eeCodeA, codeA);
    eeprom_write_byte(&eeCodeB, codeB);
    eeprom_write_byte(&eeCodeC, codeC);
    eeprom_write_byte(&eeCodeD, codeD);

    }

  else
  {
    uart_puts("EEPROM NICHT leer - werte werden ausgelesen. \n");
    codeA = eeprom_read_byte(&eeCodeA);
    codeB = eeprom_read_byte(&eeCodeB);
    codeC = eeprom_read_byte(&eeCodeC);
    codeD = eeprom_read_byte(&eeCodeD);
  }

Nun die eigentliche Frage: Ist die Definition vor der main-Funktion 
schon ein Schreibzugriff aufs EEPROM oder wird hier wirklich nur ins 
EEPROM geschrieben, wenn es leer (also 0xFF) ist?

Im ersten Fall würde ich ja nach jedem Reset/Stromausfall unnötigerweiße 
ins EEPROM schreiben, was ja nicht so schön wäre.


Mfg
Martin

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Definition sagt dem Compiler nur, dass es diese Variable gibt, und 
dass sie im EEPROM liegt. Ein Schreibzugriff ist damit nicht verbunden. 
Würdest du bei der Defintion einen Wert angeben, würde der in der 
.eep-Datei landen, die du dann per ISP in den AVR schreiben könntest.

Autor: Martin Sch. (msch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So hab ichs auch vermutet.
Die eep.-Datei kann ich mir ja sparen, ich kann den Standardcode ja auch 
wie oben geschrieben ins EEPROM schreiben, falls es leer ist.

Vielen Dank für die schnelle Antwort!

mfg
Martin

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.