Hallo, ich probiere mich gerade daran ein PWM Signal auszuwerten und damit verschiedene LEDs anzusprechen. Jetzt wollte ich mein Projekt kompilieren, bekomme aber rund 40 Fehlermeldungen. ca. 20 davon melden das gleiche Problem. In meinem Programmcode habe ich geschrieben: volatile unsigned int counting; [...] counting = 1; In der Fehlermeldung steht dann "Conflicting type qualifiers for "counting"" Und es kommt die Warnung, dass F_CPU für die delay.h nicht definiert ist, obwohl ich das meines Wissens getan habe: # undef F_CPU # define F_CPU 8000000UL Oder habe ich die falsch definiert?! Diese verstehe ich also irgendwie nicht. Ist wahrscheinlich etwas ganz banales, aber ich komme einfach nicht drauf. Ich hoffe ihr könnt mir helfen, Lepo95
Lepo95 schrieb: > In der Fehlermeldung steht dann "Conflicting type qualifiers for > "counting"" Der Fehler liegt woanders. Variable wohl mehrfach deklariert mit unterschiedlichen Qualifier, oder anderer Fehler. Lepo95 schrieb: > # undef F_CPU > # define F_CPU 8000000UL > > Oder habe ich die falsch definiert?! Auch vor dem #include <util/delay.h> definiert?
Lepo95 schrieb: > volatile unsigned int counting; > > [...] > > counting = 1; Wo steht denn das? Was soll das sein? > [...] Lepo95 schrieb: > Oder habe ich die falsch definiert?! Nein, nur an der falschen Stelle. F_CPU muß VOR dem include von delay.h definiert sein. mfg.
Danke erstmal. Die Variable Counting wird in der untenstehenden ISR benutzt. Immer wenn das PWM Signal auf High steht, steht in der Variable Counting auch eine 1. Hier einmal alle Ausschnitte aus meinem Code, in denen Counting vorkommt: volatile unsigned int counting; [..] counting = 1; // Um die Variable schon einmal mit einer 1 zu belegen [..] ISR(TIMER1_CAPT_vect) //Zum Messen der Länge eines High-Pegels { if(counting) { time = ICR1; TCCR1B |= (1 << ICES1); TIFR |= (1 << ICF1); //deleting of the Input Capture Flag TCNT1 = 0; overflow = 0; counting = 0; } else if(counting == 0) { time2 = ICR1; //Copying of 2nd counter reading overflow = 0; TIFR |= (1 << ICF1); counting = 1; TCCR1B &= ~(1 << ICES1); time_difference = gettimer() / 1092; //Mü-Seconds } } Die Fehlermeldungen inkl. Warnungen sehen wie folgt aus, alle gehören zu der Variable Counting: Warning 1 data definition has no type or storage class C:\Users\Leon-Laptop\Documents\AVRStudio 5.1\AVRGCC2\AVRGCC2\AVRGCC2.c 52 1 AVRGCC2 Warning 2 type defaults to 'int' in declaration of 'counting' C:\Users\Leon-Laptop\Documents\AVRStudio 5.1\AVRGCC2\AVRGCC2\AVRGCC2.c 52 1 AVRGCC2 Error 3 conflicting type qualifiers for 'counting' C:\Users\Leon-Laptop\Documents\AVRStudio 5.1\AVRGCC2\AVRGCC2\AVRGCC2.c 52 1 AVRGCC2 Vielen Dank schon einmal im Voraus! Lepo95
Achso, nachdem ich F_CPU vor das #include geschrieben habe, gab es keine Fehlermeldung mehr. Hat also funktioniert, Danke.
Das sind ja immer noch zusammenhanglose Codefetzen. Lepo95 schrieb: > volatile unsigned int counting; > [..] > counting = 1; // Um die Variable schon einmal mit einer 1 zu belegen > [..] Aber ich nehme mal an, du deklarierst eine globale Variable und versuchst dieser einen Wert zuzuweisen. Das funktioniert nur direkt: volatile unsigned int counting = 1; Dir fehlen die Grundlagen in C. Programmieren lernt man nicht mit der Trial and Error Methode. Und C schon gar nicht. mfg.
das Problem mit der Variable Counting besteht weiterhin. Mein vorheriger Post galt nur dem F_Cpu! Lepo95
Vielen Dank. ich werde das gleich mal ausprobieren. Mir ist schon klar, dass man C nicht einfach so lernt. Ich habe letztes Jahr ein Semester lang die Programmiersprache Ruby gelernt. Und habe versucht diese Kenntnisse auf C anzuwenden. Ich werde mich dann aber wohl noch etwas mehr mit den C-Grundlagen auseinandersetzen müssen. Aber vielen Dank für Eure gute Hilfe. Lepo95
Lepo95 schrieb: > volatile unsigned int counting; > [..] > counting = 1; // Um die Variable schon einmal mit einer 1 zu belegen Ach so. Wenn "counting = 1" im globalen Scope steht, erklärt das die Fehlermeldung. Das bedeutet dann, dass eine neue Variable angelegt werden soll und der die Zahl 1 zugewiesen werden soll. Da kein Typ da steht, gilt "int" als Default. Das ist aber weder unsigned noch volatile und beißt sich mit der vorherigen Deklaration von counting.
So, vielen Dank. Alle meine Fehlermeldungen sind jetzt weg. Demnächst wird das Programm dann auf den Controller gespielt. Falls dann noch Probleme auftauchen, melde ich mich nochmal. Vielen Dank Lepo95
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.