Struktur in Union initialisieren

OP #5933344
Lesenswert?
• ▲
▼
Hi. Ich möchte für die nachfolgende union so inititalisieren das überall 
eine 1 steht.
1
union S_Control_t{
2

3
  struct SCTL_t{
4

5
    //S Control Register Group A
6

7
      unsigned int SCTL1 :4;
8
      unsigned int SCTL2 :4;
9

10
      unsigned int SCTL3 :4;
11
      unsigned int SCTL4 :4;
12

13
      unsigned int SCTL5 :4;
14
      unsigned int SCTL6 :4;
15

16
      unsigned int SCTL7 :4;
17
      unsigned int SCTL8 :4;
18

19
      unsigned int SCTL9 :4;
20
      unsigned int SCTL10 :4;
21

22
      unsigned int SCTL11 :4;
23
      unsigned int SCTL12 :4;
24

25
      //S Control Register Group B  
26

27
      unsigned int SCTL13 :4;
28
      unsigned int SCTL14 :4;
29

30
      unsigned int SCTL15 :4;
31
      unsigned int SCTL16 :4;
32

33
      unsigned int SCTL17 :4;
34
      unsigned int SCTL18 :4;
35

36
  }SCTL_b;
37

38
  struct SCTRL_t{
39

40
            //S Control Register Group A
41
              uint8_t SCTRL_2_1;
42
              uint8_t SCTRL_4_3;
43
              uint8_t SCTRL_6_5;
44
              uint8_t SCTRL_8_7;
45
              uint8_t SCTRL_10_9;
46
              uint8_t SCTRL_12_11;
47

48
              //S Control Register Group B
49
              uint8_t SCTRL_14_13;
50
              uint8_t SCTRL_16_15;
51
              uint8_t SCTRL_18_17;
52

53
          }SCTRL_s;
54

55
}S_Control_u;

Ich hab das schon wie in dem angehängten Bild probiert. Irgendwie will 
das aber alles nicht so richtig funktionieren.

Wie würdet ihr das machen ?


Danke
Angehängte Dateien:
Gast #5934312
Lesenswert?
• ▲
▼
Könnte sein, dass Dein Compiler den C99 Standard nicht versteht oder 
nicht verstehen will, weil Du was anderes eingestellt hast.
Kann aber auch fehlerhafter Code von Dir sein, weil Du was falsch 
verstanden hast.
OP #5943422
Lesenswert?
• ▲
▼
Entschuldigt das ich mich erst jetzt wieder melde.

Ich war im Urlaub und vorher noch im KH :(.

Ich schreibe in C. Ich nutze STM32Cube. An den Standards hatte ich 
nichts geändert. Vorher war da einfach nichts eingestellt. Dann hab ich 
es mal auf C99 umgestellt. Die Fehler bleiben gleich.

Eric B. schrieb:
> #include <stdint.h>
> #include <stdio.h>
>
> union {
>   struct {
>     uint8_t a_1;
>   } a;
>
>   struct {
>     uint8_t b_1: 4;
>     uint8_t b_2: 4;
>   } b;
> } ab = {
>   .b.b_1 = 1,
>   .b.b_2 = 5
> };
>
> int main() {
>     printf("%d", ab.a_1);
> }

Bekomme ich genau die gleichen fehler.

First defined in Zeile "} ab = {" und in der gleichen Zeile multiple 
definition of ´ab´

Thomas W. schrieb:
> Du mußt auch sagen ob es C, oder C++ und welcher Standard. 98, 11, 17 ?
>
> Initialisieren kannst du es aber so:
>
> letzte Zeile:
>
> }S_Control_u = {1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0};
>
> Weil der Initializer auf die erste struct im union geht, und das sind
> nibbels.

Genau der gleiche Fehler.

Noch jemand eine Idee?
Angehängte Dateien:
Moderator #5943568
Lesenswert?
• ▲
▼
Mirco G. schrieb:
> First defined in Zeile "} ab = {" und in der gleichen Zeile multiple
> definition of ´ab´

"multiple definition of 'ab'" heißt, es gibt mehr als eine Definition
von ab. Da Erics Code aber nur eine einzige Definition von 'ab' enthält,
hast du vermutlich selber (absichtlich oder unabsichtlich) eine weitere
hinzugefügt.

Die Zeile

1
    printf("%d", ab.a_1);

sollte aber wohl

1
    printf("%d", ab.a.a_1);

lauten.

Mirco G. schrieb:
> Thomas W. schrieb:
>> ...
>> }S_Control_u = {1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0};
>> ...
>
> Genau der gleiche Fehler.

Im Vorschlag von Thomas kommt 'ab' überhaupt nicht vor, also kann
unmöglich dieselbe Fehlermeldung ausgegeben werden.
OP #5944274
Lesenswert?
• ▲
▼
Yalu X. schrieb:
> "multiple definition of 'ab'" heißt, es gibt mehr als eine Definition
> von ab. Da Erics Code aber nur eine einzige Definition von 'ab' enthält,
> hast du vermutlich selber (absichtlich oder unabsichtlich) eine weitere
> hinzugefügt.

Ne hab ich aber nicht. Gerade nochmal alles durchgeschaut. Ich habe 
nichts mit dem namen "ab" angelegt.

Yalu X. schrieb:
> Im Vorschlag von Thomas kommt 'ab' überhaupt nicht vor, also kann
> unmöglich dieselbe Fehlermeldung ausgegeben werden.

I.d.F. meinte ich natürlich multiple definition of S_Control_u

Ich habe kein _attribute_ verwendet.

Habe eben einfach mal mit alligned und packed getestet aber das hat auch 
nix gebracht. Ich weiß ja auch nicht wie die Daten für = {0,1,0,1} im 
speicher liegen müssen...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren