Forum: Mikrocontroller und Digitale Elektronik PIC32 struct Variable in allen *.c verwenden


von Klatec (Gast)


Lesenswert?

Hallo Zusammen

Ich habe eine funktioierende struct Variable die ich in jeder *.c 
verwenden kann.

in der Datei AllExt.h habe ich folgendes geschrieben (rufe ich mit 
incl.. in main.c auf)

struct PufDatIn{
  unsigned char F;
  unsigned char A;
  unsigned char B;
  }  PufDatIn;
extern struct PufDatIn ucPufDatIn[20];

und in der main.c steht

struct PufDatIn ucPufDatIn[20];

*****
Jetzt wollte ich eine Variable z.B char in der ich die 8 bit einzeln 
bearbeiten kann und habe auch was funktioierendens zusammen gebracht 
aber leider nur in der main.c, und wenn ich sie auf die gleiche Weise 
deklariere wie oben kommt immer ein Fehler.

c\main.c:340:5: error: invalid use of undefined type 'struct ERK_t'

in die Datei AllExt.h habe ich geschrieben

typedef union  {
         struct {
                 unsigned char In0: 1;
                 unsigned char In1: 1;
                 unsigned char In2: 1;
                 unsigned char In3: 1;
                 unsigned char In4: 1;
                 unsigned char In5: 1;
                 unsigned char In6: 1;
                 unsigned char In7: 1;
         };
         unsigned int w;
 } ERK_t;
extern struct ERK_t ERK;

In main.c habe ich folgendes geschrieben

         ERK_t ERK;


         ERK.w = 0;
  ERK.In0 = 1;
  ERK.In1 = 1;
  ERK.In2 = 1;
  ERK.In3 = 1;
  ERK.In4 = 1;
  ERK.In5 = 1;
  ERK.In6 = 1;
  ERK.In7 = 1;

Leider funktioniert dies nur dann in der Main.c

Wie muss die Deklaration richtig gemacht werden so dass ich sie in allen 
*.c verwenden kann.

Bitte um Hilfe. Danke.

Lg.

Johann K.

von (prx) A. K. (prx)


Lesenswert?

Uralt-C kannte nur
   struct S { ... };
verwendet als
   struct S s;

Dann kamen die Typedefs als
   typedef struct S { ... } T;
und wurden verwendet als
   T s;
oder auch wir früher
   struct S s;

Aber was nicht geht ist
   typedef struct { ... } T;
und dann
   struct T s;

von Karl H. (kbuchegg)


Lesenswert?

Klatec schrieb:


> c\main.c:340:5: error: invalid use of undefined type 'struct ERK_t'
>
> in die Datei AllExt.h habe ich geschrieben
>
> typedef union  {
...
>  } ERK_t;
> extern struct ERK_t ERK;
>

und Recht hat er.
Du hast keine struct mit diesem Namen.
Du hast zualler erst mal eine union! Die allerdings hat keinen Namen, 
aber mittels typedef hast du für diese union den Namen ERK_t vereinbart.
Also einfach nur

extern ERK_t ERK;


und vielleicht mal in deinem C-Buch nachschlagen, was es mit typedef auf 
sich hat.

von (prx) A. K. (prx)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Du hast keine struct mit diesem Namen.
> Du hast eine union!

Auch das hat er nicht. Er hat ein Typedef einer Union, den er als 
Struct-Name verwendet. Also alles rein in den Eintopf und ordentlich 
durchgerührt.

von Karl H. (kbuchegg)


Lesenswert?

A. K. schrieb:
> Karl Heinz Buchegger schrieb:
>> Du hast keine struct mit diesem Namen.
>> Du hast eine union!
>
> Auch das hat er nicht. Er hat ein Typedef einer Union, den er als
> Struct-Name verwendet. Also alles rein in den Eintopf und ordentlich
> durchgerührt.

Ja, habs in dem Moment bemerkt, als ich auf Absenden gedrückt habe und 
dann nachträglich noch korrigiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.