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:
1 | uint8_t eeCodeA EEMEM ;
|
2 | uint8_t eeCodeB EEMEM ;
|
3 | uint8_t eeCodeC EEMEM ;
|
4 | uint8_t eeCodeD EEMEM ;
|
In der Hauptschleife kommt dann als erstes folgender Code,
um bei leerem EEPROM Standardwerte in selbiges zu schreiben.
1 | //testen, ob werte im eeprom liegen, wenn nicht, standardwerte schreiben
|
2 | uart_puts("EEPROM wird gelesen \n");
|
3 |
|
4 | #define EEPROM_DEF 0xFF
|
5 |
|
6 |
|
7 | if ( ( codeA = eeprom_read_byte(&eeCodeA) ) == EEPROM_DEF)
|
8 | {
|
9 | uart_puts("EEPROM leer - standardwerte schreiben \n");
|
10 | codeA = 1;
|
11 | codeB = 7;
|
12 | codeC = 5;
|
13 | codeD = 2;
|
14 | eeprom_write_byte(&eeCodeA, codeA);
|
15 | eeprom_write_byte(&eeCodeB, codeB);
|
16 | eeprom_write_byte(&eeCodeC, codeC);
|
17 | eeprom_write_byte(&eeCodeD, codeD);
|
18 |
|
19 | }
|
20 |
|
21 | else
|
22 | {
|
23 | uart_puts("EEPROM NICHT leer - werte werden ausgelesen. \n");
|
24 | codeA = eeprom_read_byte(&eeCodeA);
|
25 | codeB = eeprom_read_byte(&eeCodeB);
|
26 | codeC = eeprom_read_byte(&eeCodeC);
|
27 | codeD = eeprom_read_byte(&eeCodeD);
|
28 | }
|
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