roboter
18.04.2007, 19:38
Hallo,
ich habe ein Problem mit den Interrupts bei meinem Programm.
Ich benutze den ATMega8 und brauche den SIG_OUTPUT_COMPARE2 und den SIG_OVERFLOW0. Ich habe natürlich versucht die Interrupt sehr kurz zu halten, allerdings wird der Compare2 Interrupt sehr häufig aufgerufen. Abundzu wird ein Ausgangspin auf 1 gesetzt und der Timer0 gestartet. Wenn dann der Overflow0 auftritt, soll der Ausgangspin wieder auf 0 gesetzt werden. Allerdings habe ich festgestellt das der Overflow0 manchmal nicht kommt und der Ausgangspin nicht zurückgesetzt wird. Kann es sein das zur gleichen Zeit compare2 und overflow0 auftreten und der oderflow0 mit niedrigerer Priorität nicht ausgeführt wird?
Wie kann man diesen Fehler abfangen?
Könnte ich beim Aufruf von Compare2 einfach den sei() Befehl benutzten, so dass der Overflow0 den compare2 unterbricht? Ich weiß, das ist unschön programmiert, aber im Overflow0 wird nur ein pin auf 0 gesetzt, sollte sich also nicht zu sehr verschachteln...
ich habe ein Problem mit den Interrupts bei meinem Programm.
Ich benutze den ATMega8 und brauche den SIG_OUTPUT_COMPARE2 und den SIG_OVERFLOW0. Ich habe natürlich versucht die Interrupt sehr kurz zu halten, allerdings wird der Compare2 Interrupt sehr häufig aufgerufen. Abundzu wird ein Ausgangspin auf 1 gesetzt und der Timer0 gestartet. Wenn dann der Overflow0 auftritt, soll der Ausgangspin wieder auf 0 gesetzt werden. Allerdings habe ich festgestellt das der Overflow0 manchmal nicht kommt und der Ausgangspin nicht zurückgesetzt wird. Kann es sein das zur gleichen Zeit compare2 und overflow0 auftreten und der oderflow0 mit niedrigerer Priorität nicht ausgeführt wird?
Wie kann man diesen Fehler abfangen?
Könnte ich beim Aufruf von Compare2 einfach den sei() Befehl benutzten, so dass der Overflow0 den compare2 unterbricht? Ich weiß, das ist unschön programmiert, aber im Overflow0 wird nur ein pin auf 0 gesetzt, sollte sich also nicht zu sehr verschachteln...