Gast
#1859151
Moin, was geschieht im Controller (AVR) wenn die Interrupts zu schnell hintereinander rein kommen. Das Programm bleibt stehen, und dann? Gruß Knut
|
Anzeige
|
Mega128 friert ein
Gast
#1859151
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. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|