Zitat Zitat von DerSchatten
Puh, das klingt alles sehr komplex ...
klingt nur so.

Zitat Zitat von DerSchatten
... Also wenn ich mit sei() den Interrupt starte wird zuerst der höher abgearbeitet. Wenn aber jetzt das Verhalten des ersten Interrupts nie eintritt wird der niedere nie abgearbeitet?
Wieso das denn? Wenn Du am ersten Platz der Warteliste stehst - und beim Aufruf nicht erscheint - dann darf doch der nächste mitfliegen/fahren/etc - oder nicht? GENAUSO ist es bei den Interrupts.

Der Interrupt wird abgearbeitet:
a) wenn er erlaubt ist : sei();
b) wenn ein Auslöser kommt
b1) der kann z.B. in einer Initialisierungsroutine - z.B. init_TC0 - Initialisiere Timer Counter 0 vorbereitet werden
c) wenn keine andere ISR läuft
d) wenn nicht gleichzeitig ein anderer, höher priorisierter IR kommt
e) wenn eine ISR da ist. Kommt schon mal vor dass ein IR kommt - und keine ISR da ist - dann gibts ein bisschen Konfusion (aber das behandeln wir später)
f) wenn der Rechner/Controller (noch) läuft *ggg*

Zitat Zitat von DerSchatten
... Also wenn ich mit sei() den Interrupt starte ...
Du weißt sicher, dass dies nicht die einzige Startbedingung ist - das kann variieren. DENN sei(); ist eine notwendige, aber nicht immer eine hinreichende Bedingung. Manchmal sind weitere Initialisierungen und Interrupt enable Flags notwendig oder sonstwiewasauchimmer.