Hallo zusammen,
es ist gerade wieder einer der Tage, wo ich mich frage, ob ich in der
Grundschule bei den Zahlen von 1 bis 10 richtig aufgepaßt habe. Ich habe
zwei Bitfelder:
1 | //Data structure definition for the TMC222 status information.
|
2 | //Use variables of this data type togehter with the GetFullStatus1() function.
|
3 | typedef struct Tmc222Sta1 {
|
4 | unsigned char slaveAddress : 8;
|
5 | unsigned char address : 8;
|
6 | unsigned char IHold: 4;
|
7 | unsigned char IRun: 4;
|
8 | unsigned char VMin: 4;
|
9 | unsigned char VMax: 4;
|
10 | unsigned char Acc: 4;
|
11 | unsigned char Shaft: 1;
|
12 | unsigned char StepMode: 2;
|
13 | unsigned char AccShape: 1;
|
14 | unsigned char TInfo: 2;
|
15 | unsigned char TW: 1;
|
16 | unsigned char TSD: 1;
|
17 | unsigned char UV2: 1;
|
18 | unsigned char ElDef: 1;
|
19 | unsigned char SteppLoss: 1;
|
20 | unsigned char VddReset: 1;
|
21 | unsigned char CPFail: 1;
|
22 | unsigned char NA: 1;
|
23 | unsigned char OVC2: 1;
|
24 | unsigned char OVC1: 1;
|
25 | unsigned char ESW: 1;
|
26 | unsigned char Motion: 3;
|
27 | unsigned char na0: 8;
|
28 | unsigned char na1: 8;
|
29 | } Tmc222Status1_t;
|
30 |
|
31 |
|
32 | typedef struct Tmc222Sta2 {
|
33 | unsigned char slaveAddress : 8;
|
34 | unsigned char address : 8;
|
35 | int16_t actPos : 16;
|
36 | int16_t tagPos : 16;
|
37 | unsigned char na0 : 8; // Hier steckt noch implizit die
|
38 | unsigned char na1 : 8; // Secure Position drin
|
39 | unsigned char na2 : 8;
|
40 | } Tmc222Status2_t;
|
und wenn ich auf meiner Zielplattform (STM32F103) die Größe ausgeben
lasse:
1 | printf("\fstat1=%i,stat2=%i\n\a",sizeof(Tmc222Status1_t),sizeof(Tmc222Status2_t));
|
bekomme ich die Antwort stat1=9,stat2=10 und verstehe momentan nicht
warum (bei Tmc222Status2_t erwarte ich 9).
Warum?
Viele Grüße
W.T.