Forum: Mikrocontroller und Digitale Elektronik Fehlermeldung bei ATmega48


von Hugo H. (planetenbepinkler)


Lesenswert?

Hallo zusammen,

ich bekomme immer diese Fehlermeldung 'attempt to use poisoned 
"SIG_INTERRUPT0"' und kann damit nichts anfangen.

Der Code:

/*
 * ATMEGA48_1.c
 *
 * Created: 21.04.2013 11:54:52
 *  Author: Planetenbepinkler
 */


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

#define green_led0_on() PORTC |= _BV(0)
#define green_led0_off() PORTC &= ~_BV(0)
#define green_led1_on() PORTC |= _BV(1)
#define green_led1_off() PORTC &= ~BV(1)

int main(void)
{

  DDRB = 0b11111111;  // PORTB auf Ausgang schalten
  DDRC = 0b11111111;  // PORTC auf Ausgang schalten (benutzt wird nur 
PC0 und PC1)
  DDRD = 0b11111011;  // PD2 als Eingang
  PORTD = 0b00000100;  // PD2 Auf HI setzen für Schalten gegen Masse

  EIMSK |= _BV(INT0);  // Interrupt 0 einschalten
  EICRA |= _BV(ISC01);// Trigger auf fallende Flanke setzen
  sei();  // Interrupt global erlauben

    while(1)
    {
    sweep();
    }
}

void sweep()
{
  PORTB = 0b10000000;  // Beginn des Lauflichts
  for (int i=0;i<8;i++)
  {
    _delay_ms(100);
    PORTB >>=1;
  }
}

ISR(SIG_INTERRUPT0)  // Interrupt Service Routine
{
  green_led0_on();
  _delay_ms(50);
  green_led0_off();

  green_led1_on();
  _delay_ms(2000);
  green_led1_off();
}


Wo liegt mein Fehler?!
Danke für eure Hilfe.

von Timmo H. (masterfx)


Lesenswert?

Ersetze "ISR(SIG_INTERRUPT0)" durch ISR(INT0_vect)

SIG_INTERRUPT0 und Konsorten sind veraltet ebenso wie SIGNAL anstatt 
ISR.

von troll (Gast)


Lesenswert?

Und hier noch das Warum: SIG_INTERRUPT0 ist eine alte Bezeichnung welche 
nicht mehr verwendet werden soll. Deshalb wurde sie "vergiftet" - d.h. 
mit einem speziellem Attribut versehen was beim Compilieren eine Warnung 
wie oben ergibt.

von Bernd S. (bernds1)


Lesenswert?

Schau mal nach den Namen der Interrupts. Zumindest beim GCC ist die 
Bezeichnung SIG_INTERRUPT0 und alle anderen mit SIG nicht mehr aktuell.
Jetzt sehen die Namen so aus (zum Beispiel):
1
ISR(TIMER2_OVF_vect)
2
{
3
   ...;
4
}

Eine Beispieltabelle findest du hier:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Interrupts

oder im Datenblatt deines Vertrauens (ähhm-Controllers)  ;-)

von Timmo H. (masterfx)


Lesenswert?

Oder du schaust in der iomx8.h dort sind fast ganz unten die 
Bezeichnungen sowohl alt (SIG_...) als auch neu (..._vect)

von Hugo H. (planetenbepinkler)


Lesenswert?

Danke. Hat mir geholfen.
Nur kann ich das -> "Oder du schaust in der iomx8.h dort sind fast ganz 
unten die Bezeichnungen sowohl alt (SIG_...) als auch neu (..._vect)" 
nicht entdecken:

von Timmo H. (masterfx)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.