Forum: Mikrocontroller und Digitale Elektronik eeprom und die write Funktion


von Frank (Gast)


Lesenswert?

Guten morgen zusammen,

ich habe ein kleines Problem mit dem eeprom und der schreib und lese 
Funktion und zwar spuckt der compiler warnungen aus wenn ich zum 
beispiel
adresse = eeprom_read_byte(0); schreiben möchte.

Ich habe auch schon herausgefunden woran es liegt und zwar erwartet er 
beim aufruf der funktionen einen bestimmtenzahlen wert der "gecastet" 
werden muss.

aber was dieses casten machen soll habe ich noch nicht ganz verstanden 
und weiß deshalb nicht ob das für mein Vorhaben überhaupt in so von 
Nöten ist.

Zur erläuterung ich habe im EEPROM auf der Stelle '0' die Speicher 
adresse steht wo die Variable 'indexer_position ' abgespeichert werden 
soll. In meinem Fall steht dort eine '10'.
Das heisst EEPROM Adresse '0' steht eine 10 und auf EEPROM Adresse '10' 
steht die aktuelle 'indexer_position'.

in meinem Programmteil hier Lese ich von der Adresse '0' den wert und 
schreibe dann die Indexer Position an die Adressnummer die ich von '0' 
gelesen hab.

Dann Lese ich den Krempel zurück und vergleiche ob der schreibversuch 
geklappt hat, denn wenn er nicht geklappt hat soll er auf der adresse 
'0' den wert erhöhen und dann erneut speichern. Das soll dazu dienen 
einer defekten speicherzelle aus dem weg zu gehen.

Oder könnte man das alles irgenwie eleganter machen ? weil momentan ja 
nur einmal geprüft wird ob die zelle kaputt ist.
aber ich mache nur ca 10 Speicherungen am Tag.
1
indexer_position = 0;
2
  
3
  adresse = eeprom_read_byte(0);
4
  eeprom_write_byte(adresse, indexer_position); // schreiben
5
          
6
  eeByte_read = eeprom_read_byte(adresse);
7
8
  if(indexer_position != eeByte_read){
9
    adresse = eeprom_read_byte(0);
10
    adresse++;
11
    eeprom_write_byte(0, adresse); // schreiben 
12
      
13
    adresse = eeprom_read_byte(0);
14
    eeprom_write_byte(adresse, indexer_position); // schreiben
15
  }



Vieleicht mag sich das ja mal jemand angucken :)

von André A. (nummer5) Benutzerseite


Lesenswert?

Die EEPROM Funktionen erwarten einen Zeiger als Parameter, danach 
müsstest du dann casten:
1
uint8_t adresse = eeprom_read_byte((uint8_t*)0);
2
eeprom_write_byte((uint8_t*)adresse, (uint8_t*)indexer_position); // schreiben

Hier ist alles genauer beschrieben: 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM

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.