Interrupt Befehl mittels ISR nicht kompilierbar

#815540
Lesenswert?

Hallo!
Ich bastele seit einigen tagen mit einem Mega8 rum und will nun mal die 
Interrupts ausprobieren. Das folgende Programm soll eigentlich nur eine 
LED zum blinken bringen:

#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>


int main (void)
{
 uint8_t zahl = 0;

 DDRD = 0xFF; // Port D nur Ausgang!


 TCCR1A = 0x00; // stetzt Statusregiser A Vom Timer eins auf null
 TCCR1B = 0x00; // stetzt Statusregiser B Vom Timer eins auf null
 TCCR1B |= (1<<CS12) ; //timer läuft mit 1/256 der CPU Geschwind.
 TIMSK |= (1<<TOIE1); //Aktiviert Interrupt beim Overflow des Timers 1



 sei();


 while(1)
 {

  ISR (TIMER1_OVF_vect)
  {
   if (zahl == 0)
    {
      PORTD|= (1<<PORTD3);
    zahl ++;
    }else{
      PORTD &= ~(1<<PORTD3);
    zahl = 0;
    }


 }
}

Dabei erzeugt der Compiler folgenden Fehler:

ompiling: servo.c
avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL  -Os 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=servo.lst -If:/Programme/AVRlib 
-std=gnu99 -MD -MP -MF .dep/servo.o.d servo.c -o servo.o
servo.c: In function 'main':
servo.c:79: error: static declaration of '__vector_8' follows non-static 
declaration
servo.c:78: error: previous declaration of '__vector_8' was here
servo.c:91:2: warning: no newline at end of file
servo.c:91: error: expected declaration or statement at end of input
make.exe: *** [servo.o] Error 1

> Process Exit Code: 2
> Time Taken: 00:00


Habe heute erst die aktuellsten Programmversionen installiert (AVRStudio 
mit den beiden Service packs und WINAvr)

hat jemand eine Idee woran das liegt?
#815553
Lesenswert?

So gehts:

#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>

uint8_t zahl = 0;

int main (void)
{

 DDRD = 0xFF; // Port D nur Ausgang!

 TCCR1A = 0x00; // stetzt Statusregiser A Vom Timer eins auf null
 TCCR1B = 0x00; // stetzt Statusregiser B Vom Timer eins auf null
 TCCR1B |= (1<<CS12) ; //timer läuft mit 1/256 der CPU Geschwind.
 TIMSK |= (1<<TOIE1); //Aktiviert Interrupt beim Overflow des Timers 1

 sei();

 while(1)
 {

 }
}

ISR (TIMER1_OVF_vect)
  {
   if (zahl == 0)
    {
      PORTD|= (1<<PORTD3);
    zahl ++;
    }else{
      PORTD &= ~(1<<PORTD3);
    zahl = 0;
   }
  }
#816004
Lesenswert?

Hallo!

Danke für die Hile, jetzt funktioniert es :D

Der Tipp mit dem Tutorial und dem in die Grundlagen einarbeiten ist auch 
gut, nur ist es so, dass ich als Student momentan sehr viel Theorie um 
die Ohren habe und nun in den Semesterferien was "mehr praktisches" 
machen möchte. Daher arbeite ich mich momentan ein bisschen in die 
Mikrocontrollerprogrammierung ein und zwar mit Tutorials wie dem hier 
empfohlenen. Ich habe diesen Fehler aber trotz des Tutorials gemacht....

Ich danke also für die Hilfe und verbleibe

mit funktionierenden Grüßen

   Ingo

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren