Hallo werte Forenmitglieder,
ich habe mal wieder ein Problem und beim lesen der Doku relativ viel
Ohrensausen bekommen...
Das Problem sieht wie folgt aus:
Ich habe ein Array angelegt,
1 | static vuint8 cto[kXcpMaxCTO];
|
, welches von einer Codekomponente über ein Union ausgelesen wird. Der
Union macht dann 8Bit, 16Bit und 32Bit Zugriffe.
1 | typedef union {
|
2 | /* There might be a loss of up to 3 bytes. */
|
3 | tEightByteField EightByteField;
|
4 | vuint16 b[ ((kXcpMaxCTO + 3) & 0xFFC) / 2 ];
|
5 | vuint16 w[ ((kXcpMaxCTO + 3) & 0xFFC) / 2 ];
|
6 | vuint32 dw[ ((kXcpMaxCTO + 3) & 0xFFC) / 4 ];
|
7 | } tXcpCto;
|
Per default scheint der Compiler/Linker das Array irgendwo hinzulegen -
kein Alignment. Wenn der 32-Bit-Unionzugriff kommt und das Array nicht
auf 4 Byte aligned ist, knallts.
Wie verhindere ich das am sinnvollsten? Ich tu mich mit so
Speicherallokierungs- und zugriffsthemen häufig schwer...
Zu Testzwecken habe ich das Array selbst aligned durch einfügen von
entsprechenden Variablen vor dem Array...
Makefile und Linkerfile sind eigentlich weitestgehend
Standardauslieferungszustand von Winarm.
Vielen Dank für Eure Hilfe.
Gruß, Christian