[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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.