PIC32 struct im gesamten Projekt verwenden

Gast #2735518
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.
#2735528
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?
Gast #2735726
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.
Gast #2735746
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.

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