Forum: Mikrocontroller und Digitale Elektronik sub in einem interrupt


von roboterheld (Gast)


Lesenswert?

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

von Uhu U. (uhu)


Lesenswert?

> 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.

von roboterheld (Gast)


Lesenswert?

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?

von Uhu U. (uhu)


Lesenswert?

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?

von roboterheld (Gast)


Lesenswert?

...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
Noch kein Account? Hier anmelden.