[ATMega] Little / Big Endian und EEPROM

OP #2055005
Lesenswert?

Hallo,

ich habe mehrere 32 Bit Datenzellen, die je einen "Header" beinhalten, 
die ich zu Dutzenden ins EEPROM speichern will. Die Zelle ist wie gesagt 
4 Bytes lang, der Header nutzt dabei die Bits 0 bis 6. Ich will nun nur 
das Byte mit dem Header auslesen.

Wenn ich nun aufs erste Byte einer einzelnen Zelle über das Index des 
32Bit Arrays zugreifen will:

Betrifft mich dann überhaupt die Little / Big Endian - Problematik oder 
badet das der Compiler zuverlässig aus?


Ich programmiere in C mit AVR Studio, nutze die GCC Toolchain. Targets 
sind diverse ATMegas (32, 2561 1281 etc.)

Gruß
Bernhard
OP #2056668
Lesenswert?

Hallo,

ich konkretisiere das gane mal mit ein bisschen Code:
1
// Das Array aus DWORDs, Platz ist EEPROM:
2
uint32_t EEDesGraphsMemory[EEPARTSIZE] EEMEM;
3

4
// Das erste Byte von Doppelwort 13 soll ausgelesen werden
5
uint16_t ZeigeaufDWord13 = 13
6

7
// Der Zugriff: Problem: Big / Little Endian ?
8
uint16_t FirstByte = eeprom_read_word((uint8_t*)&EEDesGraphsMemory[ZeigeaufDWord13]);

Geht das so? Wenn nein wie kann mans besser machen?

Gruß
Bernhard
Gast #2056704
Lesenswert?

> uint16_t FirstByte =
  ^^^^^^^^      ^^^^
> eeprom_read_word((uint8_t*)&EEDesGraphsMemory[ZeigeaufDWord13]);
              ^^^^  ^^^^^^^

Was für ein Doppelkuddelmuddel mit Byte und Word!

> ich habe mehrere 32 Bit Datenzellen, die je einen "Header" beinhalten,
> die ich zu Dutzenden ins EEPROM speichern will. Die Zelle ist wie gesagt
> 4 Bytes lang, der Header nutzt dabei die Bits 0 bis 6. Ich will nun nur
> das Byte mit dem Header auslesen.

Komplette Datenzelle lesen und Header (Bit0-Bit6) extrahieren
1
uint8_t header = eeprom_read_dword(&EEDesGraphsMemory[ZeigeaufDWord13]) & 0x7F;

Oder nur das niederwertigeste Byte lesen und Header (Bit0-Bit6) 
extrahieren
1
uint8_t header = eeprom_read_byte(&EEDesGraphsMemory[ZeigeaufDWord13])  & 0x7F;

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