Hallo,
ich möchte eine 32-Bit Zahl im EEProm speichern.
Zum EEProm Zugriff nutze ich folgende Funtionen:
1 | void EEPWrite(uint8_t addr, uint8_t val)
|
2 | {
|
3 | while(!eeprom_is_ready());
|
4 | eeprom_write_byte((uint8_t*)addr, val);
|
5 | }
|
6 | unsigned char EEPRead(uint8_t addr)
|
7 | {
|
8 | while(!eeprom_is_ready());
|
9 | return(eeprom_read_byte((uint8_t *)addr));
|
10 | }
|
Nun habe ich erstmal versucht einen Wert wie folgt zu schreiben:
1 | EEPWrite(0,0xff);
|
2 | EEPWrite(1,0xff);
|
3 | EEPWrite(2,0x01);
|
Dies funkttioniert auch, und ich kann die geschriebenen Werte auslesen.
Wenn ich nun aber wie folgt auslese:
1 | uint32_t Zaehler;
|
2 | Zaehler=(EEPRead(2)<<16) + (EEPRead(1)<<8) + EEPRead(0);
|
3 | EEPWrite(0,(uint8_t*) Zaehler);
|
4 | EEPWrite(1,(uint8_t*) (Zaehler>>8));
|
5 | EEPWrite(2,(uint8_t*) (Zaehler>>16));
|
...und wieder schreibe, dann steht hinterher 0xff an jeder Stelle. Bis
16-Bit funktioniert alles.
Shifte ich falsch, oder wo ist mein Denkfehler?
LG
Daniela