Forum: Compiler & IDEs SIGNAL vs. INTERRUPT


von Martin Raffelsieper (Gast)


Lesenswert?

Danke an Florian und Jörg für die Anregungen

Ist es denn so, dass eine Interuptroutine

"SIGNAL" weitere Interrupts zulässt (und somit verschachtelte Aufrufe
gestattet)

dagegen "INTERRUPT" dies verhindert oder ist es umgekeht???


Gruß Martin

von Peter D. (peda)


Lesenswert?

INTERRUPT läßt sofort alle Interrupts wieder zu. Man hat also keinerlei
Kontrolle welche Interrupts und wie oft sich diese schachteln und ob es
überhaupt jemals zur Abarbeitung aller Anforderungen kommt.

In meinen Augen ist sowas höchst gefährlich und daher unbedingt zu
vermeiden.

Wenn überhaupt, dann nur SIGNAL nehmen, zuerst alle nicht priorisierten
Interrupts sperren und dann mit "sei();" global wieder freigeben.
Am Ende muß man natürlich alles wieder zurückwursteln.


Peter

von Martin Raffelsieper (Gast)


Lesenswert?

Peter, danke für den Tip

von Peter D. (peda)


Lesenswert?

Ich denke mal, die INTERRUPTs mit sofortiger Freigabe kommen von solchen
Architekturen, die Software-Interrupts verwenden. Denn das sind ja gar
keine echten Interrupts, sondern nur Unterprogrammaufrufe und da kann
man natürlich die echten Hardwareinterrupts wieder zulassen.

Aber wie gesagt, beim AVR gibts das ja nicht und da sind dann solche
INTERRUPTs völlig nutzlos, weil kreuzgefährlich.


Und beim 8051 gibts das erst garnicht, weil das dort die CPU intern
macht. Man kann dort nur vorher per Prioritätslevel festlegen, welcher
Interrupt welchen anderen unterbrechen darf. Und dann gehts auch nur
soweit, wie verschieden Prioritäten vergeben wurden. Sich selbst kann
ein Interrupt in keinem Fall unterbrechen.


Peter

von Matthias (Gast)


Lesenswert?

Hi

wenn man weiß was man tut kann INTERRUPT durchaus nützlich sein. Ich
verwende das z.B. um eine 4-Kanal-PWM halbwegs Jitterfrei hinzubekommen
obwohl nebenher noch ein zweiter Timer-INT kommt dessen Ausführung
etwas länger dauert. So generell kann man also nicht sagen das
INTERRUPT() kreuzgefährlich und nutzlos ist. Man muß eben wissen was
man tut. Wenn man das nicht so genau weiß -> SIGNAL()

Matthias

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
Noch kein Account? Hier anmelden.