Hi zusammen,
vorab, ich bin mir dessen bewusst, dass die suche noch funktioniert, hab
sie ja gerad Stunden lang gequält. Gefunden hab ich auch alles Mögliche,
nur nichts was mich weiterbringt. Daher: Entschuldigung für noch eine
"Union"-Thema.
Zu meinem Problem:
ich möchte auf 10 aneinander gereihte Bytes sowohl per Index zugreifen
(also ein Array) als auch über eine Mischung aus uint16_t und uint8_t.
Etwas verständlicher:
die 10 Bytes
uint16_t var1,
uint16_t var2,
uint8_t var3,
uint8_t var4,
uint8_t var5,
uint8_t var6,
uint8_t var7,
uint8_t var8
sollen in obiger Reihenfolge über das Array
uint8_t arr[10]
gelesen und geschrieben werden können.
Allgemein sollte dafür mMn eine union die richtige Wahl sein. Nur
irgendwie stell ich mich wohl an.
1 | union union_t
|
2 | {
|
3 | struct
|
4 | {
|
5 | uint16_t var1,
|
6 | uint16_t var2,
|
7 | uint8_t var3,
|
8 | uint8_t var4,
|
9 | uint8_t var5,
|
10 | uint8_t var6,
|
11 | uint8_t var7,
|
12 | uint8_t var8
|
13 | };
|
14 | uint8_t array[10];
|
15 | };
|
16 |
|
17 | ...
|
18 | int main( void ){
|
19 | union_t beides;
|
20 | ...
|
21 | }
|
Jetzt steh ich irgendwie grad aufm Schlauch. Wie sprech ich die jetz an?
beides.array[x] ist das x-te byte?
beides.var2 entspricht ( (beides.array[2]<<8) | beides.array[3] ) ,
oder?
Es scheint mir nur, das funktioniert nicht?!
Wenn ich beides.var2 = 3 setze und daraufhin beides.array[2] lese hat
dies irgendwie einen zufälligen Wert habe ich das Gefühl.
Kann mir jemand bestätigen, dass der "Code" oben so fehlerfrei ist?
Dann such ich nämlich den Fehler an anderer stelle weiter.
Vielen Dank
Michael