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
Ich würde mal sagen, daß die avr-libc Dir das abnimmt (sofern Du sie benutzt und auch beim Schreiben benutzt)
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
> 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; |
Sorry, der Kuddelmuddel ist mir beim Kopieren pasiert, das ist beim Programmieren alles korrekt ;) Ich werde die "Optimierung" des etwas schnelleren Rauslesens also rausnehmen und das komplette DWORD rauslesen. Gruß Bernhard
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.