Forum: Mikrocontroller und Digitale Elektronik Probleme bei EEPROM 16Bit Zugriff


von Draco (Gast)


Angehängte Dateien:

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?!

von Draco (Gast)


Lesenswert?

Die fehlende eeReadWord:
1
uint16_t eeReadWord(uint16_t * adresse)
2
{
3
  return eeprom_read_byte((uint16_t *)adresse);
4
}

von Draco (Gast)


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

von chris (Gast)


Lesenswert?

Draco schrieb:
> eeprom_read_byte

Überraschung!
Wenn man nur ein Byte liest, wird auch nur ein Byte gelesen

von Draco (Gast)


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!

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.