PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt problem



axors
06.12.2005, 08:36
Hallo!

ICh habe das Problem, dass mein Compiler den Ausdruck SIG_OUTPUT_COMPARE0 nicht kennt. Ich verwende den ATmega32 und habe die Bilbiotheken interrupt, io, und signal includiert.

Ich bitte um eure Hilfe und bedanke mich dafür im Vorraus

MfG

askazo
06.12.2005, 08:43
Das Makro ist im WinAVR in der Lib für den Mega32 auf jeden Fall vorhanden, die ja über io.h eingebunden wird.
Hast Du im Makefile den Prozessor richtig angegeben?
Ist unter WinAVR\avr\include\avr die iom32.h wirklich vorhanden und ist das Makro dort definiert?
Hast Du Dich vielleicht verschrieben?

Was anderes fällt mir im Moment nicht ein.

askazo

SprinterSB
06.12.2005, 14:52
Wie sieht denn die Fehlermeldung aus?

Hast du das rot geschriebene beachtet in?
https://www.roboternetz.de/wissen/index.php/Avr-gcc#Interrupts

Kaiser-F
06.01.2006, 13:26
Hallo,

Ich habe ein seltsames Problem.

Ich will nun in einem Programm einen TIMER Interrupt verwenden ( Mega32 )

wenn ich mit dem Befehl sei(); die Interrupts global freigebe, dann scheint es als würde der Mega32 immer wieder neustarten. er kommt garnicht dazu etwas zu machen.

Er schreibt mir immer über den UART "INITIALISATIN OK"
Das schreibt er normal 1 mal wenn er eben das zeug Initialisiert.

Ich weiß mir da leider nicht zu Helfen.

linux_80
06.01.2006, 13:39
Hallo,
das kann dann nur ein Interrupt sein, der nicht von Dir gewünscht ist, so ein IRQ springt dann zum Reset.
Du musst jetzt nur herausfinden was für ein IRQ da auftritt oder ob Du irgendwo einen Interupt einschaltest und keine ISR dafür da ist.

Kaiser-F
06.01.2006, 13:46
nun ja.

Ich will im Prinzip dass mein Mega32 alle 0.5 sec eine Statusinformation an den CAN-BUS sendet.

Da es verschiedene Operationsmoden gibt, will/kann ich das nicht über eine variable zählen kassen, sondern will den Timerinterrupt dazu benutzen.

darum hab ich den TIMER0 in CTC Mode eingestellt und in
TIMSK den OCIE0 auf 1 gesetzt.

Mit der Funktion

SIGNAL( SIG_OUTPUT_COMPARE0 ) { STATUS_clk--; }

Sollte das dann funktionieren....

Kaiser-F
06.01.2006, 13:52
habgerade festgestellt dass es entweder an

SIGNAL( SIG_OUTPUT_COMPARE0 ) { STATUS_clk--; }

liegt,

oder an der Einstellung von TIMSK...

Hab vorher aus versehen nicht TIMER0 ausgeklingt bei der Ursachenforschung, sondern einen anderen TIMER1....
Sorry.

Aber funkt wie gesagt nicht. sobald ich den TIMER0 einstelle mit TIMSK dann resettet er mir immer...

Kaiser-F
06.01.2006, 14:30
Seltsamerweise geht es jetzt, kann euch aber nicht sagen wo der Fehler war.

Hab noch mal alles so gemacht wie es hier steht:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=13902&highlight=timer+interrupt


Danke für deine Hilfe linux_80.

SprinterSB
06.01.2006, 14:37
Es muss heissen
SIGNAL (SIG_OUTPUT_COMPARE0)
und nicht
SIGNAL( SIG_OUTPUT_COMPARE0 )

Die Leerzeichen in der Klammer müssen weg!

https://www.roboternetz.de/wissen/index.php/Avr-gcc#Interrupts
https://www.roboternetz.de/wissen/index.php/Avr-gcc#Signal.2FInterrupt-Name_vertippt_oder_Leerzeichen_zu_viel

Kaiser-F
06.01.2006, 18:46
AAAhh....

Compilergeschichte nicht? Danke für den Tipp.