-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Syntax Error bei ISR()

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    27.04.2006
    Ort
    Aachen
    Beiträge
    31

    Syntax Error bei ISR()

    Anzeige

    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;
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Wenn ich main mit "int main(void)" deklariere, wird das ohne Fehler kompiliert, sonst auch nur mit einer Warnung.

    Gruß Dirk

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    27.04.2006
    Ort
    Aachen
    Beiträge
    31
    hmm. Also ignorier ich die Warnung garnz einfach?!

    Danke!

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Es ist nicht gut Warnungen zu ignorieren. Es kann gut gehen, aber auch nicht.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    @.patrick:
    hmm. Also ignorier ich die Warnung garnz einfach?!
    Warum?
    Mach doch das "void" einfach da hin, dann gibt's auch keine Warnung mehr.

    Gruß Dirk

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    27.04.2006
    Ort
    Aachen
    Beiträge
    31
    ISR(void TIMER0_COMP_vect)
    Dabei bekomm ich aber 'nen Fehler: "two or more data types in declaration specifiers".


    Gruß!

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Dort gehört das "void" auch nicht hin.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    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.
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    "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.

  10. #10
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •