Probleme bei EEPROM 16Bit Zugriff

Gast #4667959
Lesenswert?
• ▲
▼
Ich habe mehrere Variablen im EEPROM, ich beschreibe ihn und lese ihn 
aus. Nur mein Problem ist, das er es (wahrscheinlich) falsch ausließt, 
bzw. nur 8bit:

Schreiben:
1
void SaveDataToEE()
2
{
3
  //Channel 1 0x10 <-> 0x14
4
  eeprom_update_word(0x10,ChannelTop[0]);
5
  eeprom_update_word(0x12,ChannelMiddle[0]);
6
  eeprom_update_word(0x14,ChannelBot[0]);
7

8
  //Channel 2 0x16 <-> 0x20
9
  eeprom_update_word(0x16,ChannelTop[1]);
10
  eeprom_update_word(0x18,ChannelMiddle[1]);
11
  eeprom_update_word(0x20,ChannelBot[1]);
12

13
  //Channel 3 0x22 <-> 0x26
14
  eeprom_update_word(0x22,ChannelTop[2]);
15
  eeprom_update_word(0x24,ChannelMiddle[2]);
16
  eeprom_update_word(0x26,ChannelBot[2]);
17

18
  //Channel 4 0x28 <-> 0x32
19
  eeprom_update_word(0x28,ChannelTop[3]);
20
  eeprom_update_word(0x30,ChannelMiddle[3]);
21
  eeprom_update_word(0x32,ChannelBot[3]);
22
}


und lesen:
1
void ReadChannelFromEE()
2
{
3
  //Channel 1
4
  ChannelTop[0] = eeReadWord(0x10);
5
  ChannelMiddle[0] = eeReadWord(0x12);
6
  ChannelBot[0] = eeReadWord(0x14);
7

8
  //Channel 2
9
  ChannelTop[1] = eeReadWord(0x16);
10
  ChannelMiddle[1] = eeReadWord(0x18);
11
  ChannelBot[1] = eeReadWord(0x20);
12

13
  //Channel 1
14
  ChannelTop[2] = eeReadWord(0x22);
15
  ChannelMiddle[2] = eeReadWord(0x24);
16
  ChannelBot[2] = eeReadWord(0x26);
17

18
  //Channel 1
19
  ChannelTop[3] = eeReadWord(0x28);
20
  ChannelMiddle[3] = eeReadWord(0x30);
21
  ChannelBot[3] = eeReadWord(0x32);
22
}

Der EEPROM Inhalt schaut folgendermaßen aus, das scheint zu passen 
(IntelHex!):
1
:10000000FF04FFFFFFFFFFFFFFFFFFFFFFFFFFFFFB
2
:100010001A0FEB0BBD08120FE20BFFFFFFFFFFFFF4
3
:10002000B208060FD50BA408150FFFFFFFFFFFFF57
4
:10003000E40BB308FFFFFFFFFFFFFFFFFFFFFFFF22
5
:10004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
6
:10005000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
7
:10006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
8
:10007000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
9
:10008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
10
:10009000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
11
:1000A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
12
:1000B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
13
:1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
14
:1000D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
15
:1000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
16
:1000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10
17
:10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
18

19
//... gekürzt

Woran könnte das liegen? Ich bekomme auch die Cast Warnung vom Compiler, 
aber das dürfte ja erstmal nicht ganz so schlimm sein oder?!
Angehängte Dateien:
Gast #4667969
Lesenswert?
• ▲
▼
Aaaaaahhhhhhhhh.... :-D

Beim reinkopieren und nochmal lesen gerade hab ich den Fehler gesehen!
1
uint16_t eeReadWord(uint16_t * adresse)
2
{
3
  return eeprom_read_byte((uint16_t *)adresse);
4
                     ^^^^
5
}

Muss natürlich word heißen, dann klappt das auch mim Nachbarn, im 
EEPROM. :-D
Gast #4667973
Lesenswert?
• ▲
▼
chris schrieb:
> Draco schrieb:
>> eeprom_read_byte
>
> Überraschung!
> Wenn man nur ein Byte liest, wird auch nur ein Byte gelesen

Ja Chris :-) Asche auf mein Haupt. Hab ich dann auch gerade gelesen als 
ich es nochmal überflog. Ich brauch nen Kaffee :-D Aber danke für deine 
Aufmerksamkeit!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren