Hallo
Ich suche eine Möglichkeit, mit der ich Variablen (>8 Bit) in die
entsprechenden Bytes aufteilen kann und so hinterher einzeln bearbeiten
kann.
Um 16-Bit Variablen in 8-Bit Blöcke zu teilen klappt das einwandfrei:
1 | #define HIGH(Word16) (((uint8_t*) &Word16)[1])
|
2 | #define LOW(Word16) (((uint8_t*) &Word16)[0])
|
3 |
|
4 | uint16_t foo;
|
5 | LOW(foo)=0x12;
|
Soweit so gut. Jetzt möchte ich nach diesem Prinzip eine 32-Bit Variable
aufteilen, aber nicht in Bytes, sondern in 16-Bit Worte:
1 | #define HIGH(Word32) (((uint16_t*) &Word32)[1])
|
2 | #define LOW(Word32) (((uint16_t*) &Word32)[0])
|
3 |
|
4 | uint32_t foo;
|
5 | HIGH(foo)=0x1234;
|
Diese Variante funktioniert ersteinmal auch. Allerdings gibt mir der
Compiler folgende Warnmeldung:
>"dereferencing type-punned pointer will break strict-aliasing rules"
In den beiden Beiträgen, die ich hier im Forum zu diesem Thema gefunden
habe, werden Workarounds vorgeschlagen. Beispielsweise soll eine Union
verwendet werden. Das möchte ich aber nicht, da ich dann ja zukünftig
alle Variablen als u_Union16, Union16, u_Union32, ... deklarieren
müsste. Sehr unschön.
Was kann ich tun?
Grüße
Steffen