Moin, was geschieht im Controller (AVR) wenn die Interrupts zu schnell hintereinander rein kommen. Das Programm bleibt stehen, und dann? Gruß Knut
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.