Zitat Zitat von cumi
[...] Jetzt wenn ich am Anfang vom Algorithmus cli mache und dann immer wieder einmal sei und gleich wieder cli (ohne etwas dazwischen) werden dann im Takt nachdem cli ausgeführt wurde die IRQ abgearbeitet, bevor schonwieder sei kommt?
Nein. Ein CLI sperrt unmittelbar die IRQs. Genaugenommen werden nicht die IRQs gesperrt, sondern daß die entsprechende ISR ausgeführt wird. Die entsprechenden IRQ-Flags bleiben gesetzt (bei flankengetriggerten IRQs), bis man sie von Hand löscht werden oder man ein SEI macht. In letzterem Fall wird die ISR dann entsprechend verzögert abgearbeitet.

Ein SEI unmittelbar gefolgt von einem CLI wird auch keine IRQ durchlassen, weil ein SEI nicht unmittelbar wirkt. Wenn man so etwas wie ein yield (anstehende IRQs abarbeiten) haben will, muss zwischen dem SEI und dem CLI also mindestens eine weitere Instruktion stehen.

Eine SEI-NOP-CLI-Sequenz wird also die Abarbeitung genau einer ISR erlauben -- nicht mehr, denn nach einer ISR wird immer eine Instruktion der Appliation abgearbeitet, und diese ist dann das CLI.