AVR: Interrupt-Erstellungsfehler

Ich versuche zu lernen, wie man Interrupts für ein Projekt mit einem Attiny85 verwendet. Ich habe ein einfaches Programm aus dem geschrieben, was ich aus Tutorials gelernt habe. Wenn ich jedoch versuche, das Programm in Atmel Studio zu erstellen, erhalte ich diese Fehlermeldung:

"Fehler 2 statische Deklaration von '__vector_1' folgt nicht-statischer Deklaration"

Ich verstehe nicht, was das bedeutet oder wo mein Fehler lag. Ich habe überall nach Antworten gesucht, aber ich habe den Grund für den Fehler noch nicht gefunden. Hier ist mein Code:

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>


int main (void)
{

    DDRB = 0b11111011; // set all pins to be output except PB2 to prevent false signals 

    GIMSK |= (1<<INT0); //set PB2 to interrupt
    sei();

    MCUCR |=(1<<ISC00);  //set to detect any change as interrupt
    MCUCR &= ~(1<<ISC01);


    ISR(INT0_vect)

    {

    // dot
    PORTB = 0b00001000;
    _delay_ms(500);
    PORTB = 0b00000000;
    _delay_ms(200);

    // dot
    PORTB = 0b00001000;
    _delay_ms(500);
    PORTB = 0b00000000;
    _delay_ms(200);

    // dot
    PORTB = 0b00001000;
    _delay_ms(500);
    PORTB = 0b00000000;
    _delay_ms(600);

    // dash
    PORTB = 0b00001000;
    _delay_ms(1000);
    PORTB = 0b00000000;
    _delay_ms(500);

    // dash
    PORTB = 0b00001000;
    _delay_ms(1000);
    PORTB = 0b00000000;
    _delay_ms(500);

    // dash
    PORTB = 0b00001000;
    _delay_ms(1000);
    PORTB = 0b00000000;
    _delay_ms(600);

    // dot
    PORTB = 0b00001000;
    _delay_ms(500);
    PORTB = 0b00000000;
    _delay_ms(200);

    // dot
    PORTB = 0b00001000;
    _delay_ms(500);
    PORTB = 0b00000000;
    _delay_ms(200);

    // dot
    PORTB = 0b00001000;
    _delay_ms(500);
    PORTB = 0b00000000;
    _delay_ms(2000);


        }

    while (1) {


    }



    }

Wenn jemand Hilfe leisten könnte, wäre es sehr zu schätzen.

Danke schön,

-David

Antworten (1)

Sie haben Ihren ISR innerhalb von geschrieben main(). Tun Sie das nicht; Schließen Sie zuerst die vorherige Funktion.

void main(void)
{
   ...
}

ISR(...)
{
   ...
}