Wenn ich main mit "int main(void)" deklariere, wird das ohne Fehler kompiliert, sonst auch nur mit einer Warnung.
Gruß Dirk
Hi!
Der untenstehende Code ist noch nicht getestet und macht auch noch nicht viel Sinn.
Warum bekomme ich in der Zeile mit "ISR(TIMER0_COMP_vect)" einen Syntay-Error in eclipse, egal welchen Interrupt-Vektor ich übergebe? Ich seh's nicht.
Code:#include <avr/io.h> #include <avr/interrupt.h> #include <inttypes.h> int main() { //LED-Port als Ausgang DDRC = 255; //Timer0 auf CTC-Betrieb setzen TCCR0 |= (1 << WGM01) | (0 << WGM00); //Vorteiler auf 256 setzen TCCR0 |= (1 << CS02) | (0 << CS01) | (0 << CS00); //Vergleichswert für CTC-Betrieb setzen OCR0 = 120; //Compare-Match-Interrupt für Timer0 aktivieren TIMSK|= (1 << OCIE0); //Globale Interrupts aktivieren sei(); while(1) { } return 0; } //Funktion die aufgerufen wird, wenn TCCR0 = OCR0 ISR(TIMER0_COMP_vect) { //LEDs toggeln PORTC = ~PORTC; }
Wenn ich main mit "int main(void)" deklariere, wird das ohne Fehler kompiliert, sonst auch nur mit einer Warnung.
Gruß Dirk
hmm. Also ignorier ich die Warnung garnz einfach?!
Danke!
Es ist nicht gut Warnungen zu ignorieren. Es kann gut gehen, aber auch nicht.
@.patrick:
Warum?hmm. Also ignorier ich die Warnung garnz einfach?!
Mach doch das "void" einfach da hin, dann gibt's auch keine Warnung mehr.
Gruß Dirk
Dabei bekomm ich aber 'nen Fehler: "two or more data types in declaration specifiers".ISR(void TIMER0_COMP_vect)
Gruß!
Dort gehört das "void" auch nicht hin.
Entweder function(), was das gleiche ist wie function(void) und was keine Parameter bedeutet oder function(datentyp parametername,...) also mit Parameter. vor den Funktionsnamen kommt bei der Definition eben noch der Rückgabedatentyp also z.B. int, wenn int zurückgegeben wird oder void, wenn man nichts zurückgibt.
"ISR" ist keine Function im üblichen Sinne, sondern ein Macro mit einem vordefiniertem Symbol in der Klammer. dieses Symbol gibt die ISR-Vector Nummer an.
Daraus muss der Einsprung in eine Interrupt-Routine angelegt werden UND ein Vector darauf in der isr-vectortabelle.
Call-Argumente und return-Values gibt's definitiv nicht.
Insofern hiesse es sowieso immer
void isr_entry(void)
schau mal nach, die Schreibweise "TIMER0_COMP_vect" muss GENAU stimmen ( "_vect" ist kleingeschrieben ?)
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Wo kommt die Fehlermeldung überhaupt her? Vom Compiler oder von Eclipse selber? Letzteres kannst du dann einfach ignorieren, Eclipse kommt dann wohl nur nicht mit der etwas ungewöhnlichen Schreibweise klar, die ja erst durch die Makro-Auflösung die konkrete Funktionsdeklaration ergibt. Denn diese Makro-Auflösung kann Eclipse selber nicht vollständig durchführen, da dafür das wichtige mcu-Define fehlt. Und das unvollständig Aufgelöste ergibt dann wohl keine syntaktisch richtige Funktionsdeklaration.
MfG
Stefan
Lesezeichen