Forum: Mikrocontroller und Digitale Elektronik PIC32 struct im gesamten Projekt verwenden


von Klatec (Gast)


Lesenswert?

Hallo Zusammen

Ich möchte in meinenm PIC32 Projekt eine Struct-Variable in mehreren *.c 
verwenden.

Mit dem PIC18 ist das kein Problem hier funktioniert es so.


im main.c habe ich folgendens stehen

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

und in einer *.h habe ich das stehen

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

und diese *.h rufe ich aus den verschiedenen *.c auf.

Beim PIC32 kommt folgender Fehler

Opt.h:79:5: note: previous declaration of 'stPerBgData' was here

Kann mir bitte jemand helfen. Danke.

von Karl H. (kbuchegg)


Lesenswert?

Klatec schrieb:

> Kann mir bitte jemand helfen. Danke.

Als erstes gibst du dem struct Datentyp mal einen eigenen Namen.
1
struct InputBuffer {
2
    unsigned char F;
3
    unsigned char A;
4
    unsigned char B;
5
  };


Und erst davon legst du dann ein Array an
1
struct InputBuffer ucPufDatIn[20];
(und da siehst man jetzt auch, warum dieses Prefäxzeugs unsinnig ist. 
PufDatIn ist vom Datentyp Array of struct InputBuffer und nicht vom 
Datentyp unsigned char.)


Die Strukturdefinition und die extern Version des Arrays kommen ins 
Header File, so wie immer

"und in einer *.h"
1
struct InputBuffer {
2
    unsigned char F;
3
    unsigned char A;
4
    unsigned char B;
5
  };
6
7
extern struct InputBuffer ucPufDatIn[20];


und in der main.c inkludierst du diese 'einer *.h' (damit du die 
Strukturdefinition zur Verfügung hast) und definierst dann auch das 
Array, so dass es tatsächlich angelegt wird

main.c
1
#include "einer *.h"
2
3
struct InputBuffer ucPufDatIn[20];
4
5
int main()
6
{
7
 ....
8
}


anonyme Strukturen sind (zumindest für dich am Anfang) in den wenigsten 
Fällen sinnvoll. Gib dem Zeug einen Namen, dann kannst du es auch öfter 
verwenden, weil du dich darauf beziehen kannst.


> Opt.h:79:5: note: previous declaration of 'stPerBgData' was here

Und was hat diese Fehlermeldung jetzt mit dem zu tun, was du präsentiert 
hast?

von Klatec (Gast)


Lesenswert?

Hallo Karl Heinz

Danke für deine Antwort.

Wenn ich diese Variable (ucPufDatIn[20]) nur im Main.c verwende ist's 
ok, aber wenn ich sie in anderen *.c verwenden möchte dann kommt eine 
Fehlermeldung dass es sie nicht gibt, dafür habe ich in der opt.h diese 
mit extern ... eingetragen (so wie beim PIC18, wo es so funktioiert)und 
ab diesen Zeitpunkt kommt die angegebenen Fehlermeldung.
Aber ich werde deine Vorschlag umsetzen. Danke nochmals.

Lg.

Johann K.

von Klatec (Gast)


Lesenswert?

Hallo KH

Danke nochmals, so funktionierts, aber das brauch ich dir ja nicht zu 
sagen, das weiß du natürlich.
Ich bin nicht der überdrüber Programmierer, ich kämpfe mich von einem 
Problem zum anderen und bin froh das ich immer wieder Unterstützung 
erhalte. Danke.

Lg.

Johann K.

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.