(Dieser Beitrag wurde geloescht)
wenn man weis was man tut ists sicher kein prob.. das flag bleibt ja erhalten und wenn du die ints wieder einschaltest wird der int dann auch abgearbeitet... sollte zumindest ;) probs seh ich nur wenn du in der isr auf nen ander int warten solltest... das gäbe dann einen schönen deadlock ;) 73
Ricolaaaaaa! Genau zu diesem Zweck wurde es erfunden, um Nestys durch Mehrfach-IRQ zu unterbinden! Es ist der ursprüngliche Sinn dieser Einrichtung. Ich gratuliere zur Entdeckung. Die ISR sollte selber auch nur ein Flag setzen, welches bei Prüfung durch das Hauptprogramm in eine entsprechende Sub verzweigt. Diese sollte nach Abarbeitung des Jobs das Flag zurücksetzen und den IRQ wiederfreigeben bevor sie zu Main zurückkehrt.
huch es geht also nicht nur mir manchmal so,dass ich nicht immer genau weis was ich tue ;) seh ich das richtig was du vor hast... controller schläft... böser int weckt controller auf und schaltet sich selbst "ab"... controller murkst herum und bevor er wieder schlafen geht schaltet er den int wieder ein.... jo das haut schon hin ;) 73
Die Interrupts in ISRs werden automatisch gesperrt. Will man verschachtelte Interrupts benutzen, so muß man das Interrupt Flag in der ISR aktiv einschalten. Quelle: Atmega16, S. 11 ff http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf
> Die Interrupts in ISRs werden automatisch gesperrt.
Er möchte den Interrupt aber auch nach dem Ende der ISR noch
deaktiviert haben. Das ist gerade für den (an sich unsinnigen) Fall
eines Tasters, der einen Extern-Interrupt auslöst, praktisch sogar
unabdingbar. Normalerweise pollt man Taster lieber in der Timer-ISR
(und entprellt sie dort), der Extern-Interrupt hat lediglich für den
hier skizzierten Fall Sinn, dass man mit dem Taster den Prozessor aus
dem Schlaf aufwachen lassen möchte.
Achso, jetzt hab ichs verstanden. Dann würd ich aber auch das Aufwecken und die Entprellung trennen. Aufwecken über Interrupt und anschließen pollen.
@Guido "Warum pollen wenn ich doch durch den INT definitiv weiß, das der Taster gedrückt wurde?" Weil Du es eben definitiv nicht weißt, ob wirklich das Drücken den Interrupt ausgelöst hat oder das Reiben mit dem Pullover auf der Tischplatte oder sonstige elektrostatische Entladungen. Alle Impulse größer 50ns können einen Interrupt auslösen. Peter
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.