Forum: Mikrocontroller und Digitale Elektronik AVR GCC Fehlermeldungen


von Lepo95 (Gast)


Lesenswert?

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

von Andreas B. (andreas_b77)


Lesenswert?

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?

von Thomas E. (thomase)


Lesenswert?

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.

von Lepo95 (Gast)


Lesenswert?

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

von Lepo95 (Gast)


Lesenswert?

Achso, nachdem ich F_CPU vor das #include geschrieben habe, gab es keine 
Fehlermeldung mehr. Hat also funktioniert, Danke.

von Thomas E. (thomase)


Lesenswert?

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.

von Lepo95 (Gast)


Lesenswert?

das Problem mit der Variable Counting besteht weiterhin. Mein vorheriger 
Post galt nur dem F_Cpu!
Lepo95

von Lepo95 (Gast)


Lesenswert?

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

von Andreas B. (andreas_b77)


Lesenswert?

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.

von Lepo95 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.