Forum: Mikrocontroller und Digitale Elektronik Mega128 friert ein


von I. L. (Gast)


Lesenswert?

Moin,

was geschieht im Controller (AVR) wenn die Interrupts zu schnell 
hintereinander rein kommen. Das Programm bleibt stehen, und dann?




Gruß Knut

von Hc Z. (mizch)


Lesenswert?

Da bleibt nichts stehen, es kann aber so scheinen.

Wenn eine Interruptroutine beendet ist, wird genau eine Instruktion aus 
dem Hauptprogramm erledigt, und dann wird entdeckt, dass ein Interrupt 
anliegt und der betreffende Interrupt angesprungen.  Dadurch kann es so 
aussehen, als würde die CPU stehen, das tut sie aber nur (fast) in Bezug 
auf Dein Hauptprogramm.

von Peter R. (pnu)


Lesenswert?

Das Programm bleibt nicht stehen. Es gibt da eine Prioritätsreihenfolge:

Auf jeden Fall drängt sich die Routine des int mit der höchsten 
Priorität noch vorne und wird abgearbeitet. Diese endet mit reti und 
rücksetzen des dazugehörigen int-flag.
Dann kommt der niedrigere int, der schon wartet, an die Reihe. Das 
Warten erkennt man am int-flag.
Wenn kein int-flag ansteht, geht es in die Grundroutine zurück.

Diese Warteschlange kann schon mal etwas länger werden, der 
Programmierer muss halt Sorge tragen, dass irgendwann das Grundprogramm 
wieder erreicht wird.

Wenn z.B. ein Int auf ein Signal wartet, ohne dass dieses kommt, "hängt 
sich der Kontroller auf" und arbeitet scheinbar nicht mehr. (Er ist ja 
voll mit dem Warten beschäftigt).

Der sogenannte watchdog ist für den Fall vorgesehen, dass längere zeit 
die Grundroutine nicht ereicht wird. Dann macht er gewaltsam ein Reset, 
und das Programm beginnt ganz von vorne.

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.