mikrocontroller.net

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


Autor: struct (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
typedef struct {
   char min[2];
   char hour[2];
   char day[2];
   char weekday[2];
   char month[2];
   char year[2];
} dcf_struct;

uint8_t calc_dcf77 (uint8_t dcf_array[59], dcf_struct* dcfstruct);
in der main.c wird die struct nun eigentlich angelegt:
dcf_struct dcf_complete;
uint8_t dcf[59];
diese soll einer funktion übergeben werden.
Funktionsaufruf in main.c:
calc_dcf77 ( dcf, &dcf_complete);
funktion in dcf77.c:
uint8_t calc_dcf77 (uint8_t dcf_array[59], dcf_struct* dcfstruct)
{
...
//buffer ist auch ein char array der länge 2
dcfstruct->hour[0]=buffer[0];
...
}

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^^

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

//buffer ist auch ein char array der länge 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 ?

Autor: struct (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: struct (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.