hallo, ich habe dieses beispiel mit fastavrbasic: Declare Interrupt Int0() Declare Sub test() Enable Interrupts Enable Int0 in0 rising Do WaitMs 255 Loop Interrupt Int0() Disable Int0 test() Enable Int0 End Interrupt Sub test() PORTB.0=1 End Sub ------------------ kann ein programmablauf durch einem sub-aufruf in einer interrupt-routine ins schleudern kommen? oder wird so etwas nicht gemacht? mfg
> kann ein programmablauf durch einem sub-aufruf in einer > interrupt-routine ins schleudern kommen? Nein. Allerdings kann das mit dem 'Enable Int0' in der ISR evtl. Probleme machen, wenn der nächste Interrupt hereinkommt, bevor das reti der ISR ausgeführt ist. Das 'Disable Int0' ist überflüssig, denn Interrupts werden bei der Interruptbearbeitung üblicherweise automatisch gesperrt. > oder wird so etwas nicht gemacht? In einer ISR andere Funktionen aufzurufen ist durchaus üblich. Du solltest aber unbedingt darauf achten, daß die ISR so wenig Zeit wie möglich den Prozessor blockiert.
wenn die sub test() länger dauert, hat das dann folgen für den zeitlauf der interrupt-routine? muss die sub auch kurz gefasst werden, damit "enable int0" rechtzeitig wieder kommt?
Während die ISR läuft, hält man die Interrupts gesperrt und vor Ende der ISR geht nichts anderes auf dem µC. So und nun überleg mal scharf: Was passiert, wenn du alle 100 ms einen Timerinterrupt bekommst, die ISR aber 300 ms braucht, um alle ihre Aufgaben zu erledigen?
...Während die ISR läuft, hält man die Interrupts gesperrt und vor Ende der ISR geht nichts anderes auf dem µC..... uiii.., kann evtl die pwm die gerade läuft für den motorantrieb (oc1a und oc1b )auch ins schleudern geraten??? habe den mega32. mfg
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.