Die Speicherausrichtung stimmt nicht.
Ein 32-Bit-Zeiger muss auf 32 Bit ausgerichtet (aligned) sein, somit ist
eine Zuweisung von einem 8-Bit-Zeiger auf einen 32-Bit-Zeiger in 3 von 4
Fällen falsch.
Einige Architekturen unterstützen das Zugreifen auf unausgerichtete
Speicherwörter z.B. x86, ARM tut dies nicht.
Mit diesem Attribut
1 | typedef struct __attribute__((__packed__,aligned(4))) {
|
2 | uint8_t data[1024];
|
3 | } cmd_flash_sector_t;
|
kann der Fehler behoben werden, sauberer ist jedoch die zweite Variante,
bei der auch endian-unabängig geschrieben wird.