Hi,
Gleichzeitig geht bei Rechnern (fast) garnix.Zitat von DerSchatten
Tim/Ls4 hat schon auf die unterschiedlichen Priorisierungen hingewiesen. Wenn zwei ISR "gleichzeitig" anfallen, dann wird die höher priorisierte zuerst gestartet. Ansonsten startet die, die zuerst aufgerufen wird und verbietet damit allen nachfolgenden einen neuerlichen Interrupt durchzuführen - der kommt auf ne Warteliste. Dieses Verfahren läuft in einigen meiner Projektchen völlig störungsfrei: Timer0, Timer1, LED-blinken, ADC auslesen, extINT0 und extINT1 - also sozusagen "viele" Interrupts, die in mehr oder weniger zufälliger Reihenfolge daherkommen.
Deine Frage berührt noch etwas. WENN Du nun eine ISR hast, die beispielsweise (leider) nicht so hoch priorisiert ist, wie Du möchtest, dann kannst Du die trotzdem bevorzugen. Das Stichwort heißt "nested interrupts" - und braucht eine sehr saubere Organisation vor allem der in den jeweiligen ISRn behandelten Daten. Dabei wird beim Aufruf der ISR durch Deine Software das Interrupt enable bit gesetzt "sei();" - das ansonsten erst beim RETI von der controllerinternen Organisation gesetzt wird. JETZT kann ein beliebiger anderer Interrupt SEINE ISR aufrufen - die laufende ISR wird dann genauso unterbrochen, wie das "normale" Programm. Steht in den docs z.B. im Kapitel Reset and Interrupt Handling und liest sich so:
Zitat von At[size=1
Lesezeichen