AVR: Error de compilación de interrupción

1

Estoy tratando de aprender cómo usar interrupciones para un proyecto usando un Attiny85. He escrito un programa simple de lo que he aprendido de los tutoriales. Sin embargo, cuando intento crear el programa en Atmel Studio, aparece este mensaje de error:

"La declaración estática del error 2 de '__vector_1' sigue a la declaración no estática"

No entiendo qué significa esto o dónde se encuentra mi error. He buscado respuestas por todas partes, pero aún no he encontrado el motivo del error. Aquí está mi código:

#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) {


    }



    }

Si alguien pudiera proporcionar asistencia, sería muy apreciado.

Gracias,

-David

    
pregunta Daveythewavey19

1 respuesta

3

Has escrito tu ISR dentro de main() . No hagas eso cierra la función anterior primero.

void main(void)
{
   ...
}

ISR(...)
{
   ...
}
    
respondido por el Ignacio Vazquez-Abrams

Lea otras preguntas en las etiquetas