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.
Ersetze "ISR(SIG_INTERRUPT0)" durch ISR(INT0_vect) SIG_INTERRUPT0 und Konsorten sind veraltet ebenso wie SIGNAL anstatt ISR.
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.
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) ;-)
Oder du schaust in der iomx8.h dort sind fast ganz unten die Bezeichnungen sowohl alt (SIG_...) als auch neu (..._vect)
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:
Hängt wohl von der Compiler-Version ab. In avr\include\iomx8.h http://svn.savannah.nongnu.org/viewvc/*checkout*/trunk/avr-libc/include/avr/iomx8.h?root=avr-libc&revision=2235&content-type=text%2Fplain
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.