Forum: Compiler & IDEs Zugriff auf struct schlägt fehl


von struct (Gast)


Lesenswert?

Ich arbeite mit AVRStudio 4.12 SP4 und WinAVR20071221auf einem ATmega32.
Nun habe ich in einer header Datei eine struct definiert (header Datei 
in main.c natürlich eigebunden), dcf77.h:
1
typedef struct {
2
   char min[2];
3
   char hour[2];
4
   char day[2];
5
   char weekday[2];
6
   char month[2];
7
   char year[2];
8
} dcf_struct;
9
10
uint8_t calc_dcf77 (uint8_t dcf_array[59], dcf_struct* dcfstruct);
in der main.c wird die struct nun eigentlich angelegt:
1
dcf_struct dcf_complete;
2
uint8_t dcf[59];
diese soll einer funktion übergeben werden.
Funktionsaufruf in main.c:
1
calc_dcf77 ( dcf, &dcf_complete);
funktion in dcf77.c:
1
uint8_t calc_dcf77 (uint8_t dcf_array[59], dcf_struct* dcfstruct)
2
{
3
...
4
//buffer ist auch ein char array der länge 2
5
dcfstruct->hour[0]=buffer[0];
6
...
7
}

Problem ist nun, dass die dcf77.c z.b nichts mit der definierten struct 
anfangen kann ( error: expected declaration specifiers or '...' before 
'dcf_struct', diese Fehlermeldung kommt in dcf77.c am anfang der 
Funktion).
Füge ich die gleiche Tyeedef wie in der header Datei dcf77.h ein, 
funktioniert schon mal alles ohne Fehler.

Nun aber das zerite Problem, ist der Zugriff auf die char arrays der 
struct denn überhaupt so richtig. naja, funktionieren tuts ja^^

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du musst dcf77.h überall dort einbinden, wo die darin enthaltene 
Strukturdefiniton benötigt wird, also auch in dcf77.c

1
//buffer ist auch ein char array der länge 2
2
dcfstruct->hour[0]=buffer[0];

Der Kommentar lässt vermuten, daß Du hier zwei Bytes kopieren möchtest, 
das aber tust Du nicht, Du kopierst nur ein Byte.

Was möchtest Du an dieser Stelle nun genau anstellen? Und welchen 
Zusammenhang haben buffer und dcf_array ?

von struct (Gast)


Angehängte Dateien:

Lesenswert?

Zum besseren Verständnis hab ich mal das Projekt angefügt.

>>Der Kommentar lässt vermuten, daß Du hier zwei
>>Bytes kopieren möchtest,
>>das aber tust Du nicht, Du kopierst nur ein Byte.
da hast du recht, ich hab euch nur einen Ausschnitt gezeigt, ich kopiere 
schon alles

dcf77.h ist nun auch in dcf77.c eingefügt, thx (Brett vorm Kopf)

Soweit funktioniert auch alles, ich empfange zumindest Daten.
aber als Anzeige bekomme ich immer
00:00
xx 00.00.00
da ich aber in der isr jeweils bei empfang einer 0 oder 1 jeweils 2 Led 
toggeln lasse, weiss ich dass Daten ankommen. Ich find nur nicht den 
Fehler warum die Auswertung nicht klappt. Ich dachte eben es könnte an 
der strukt oder dem array liegen

von struct (Gast)


Angehängte Dateien:

Lesenswert?

hat sich alles erledigt
bin jetzt auf die detektion der pausen umgestiegen 
(800ms,900ms,1800ms,1900ms) und da klappt alles
zudem war der timer mit 10ms etwas zu schnell eingestellt, so dass die 
isr nicht richtig abgearbeitet werden konnte
bin nun auf 50ms umgestiegen
thx trotzdem, auch wenns nichts mehr mit der eigentlichen frage zu tun 
hat

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.