cli() in SIGNAL Funktion

Gast #76962
Hallo Leute,
habe gerade etwas festellen müssen, was eventuell auch andere
interessiert.
In einer Signal Funktion ( SIGNAL(SIG_INTERRUPT1) ) wollte ich alle
Interrupts mit cli() ausschalten, um meine Interruptfunktion
abzuarbeiten. Dabei habe ich festgestellt, dass dies keine Wirkung hat.
Wenn ich stattdessen das MCUCR Register auf Null setze, habe ich die
gewünschte Funktionallität.
Ich benutze avr-gcc 3.2 mit einem mega 8.
War das schon jemanden bekannt ??? und ist das normal ???

Gruß Mattias
Gast #76963
In SIGNAL() Routinen sind die Interrupts sowieso suspendiert...  Sie
werden vom abschließenden RETI (vom Compiler automatisch eingefügt)
wieder zugelassen.
Gast #76964
hmm, das dachte ich eigentlich auch immer. Tatsache ist aber, wenn ich
meinen Interrupt zweimal kurtz hintereinander auslöse, wird die
Funktion auch zweimal ausgeführt, obwohl der zweite Interrupt
unbeachtet bleiben sollte. Eventuell liegt das aber auch daran, dass
ich eine Funktion aus der SIGNAL Funktion aufrufe.
Ist ja auch egal. Ich schalte einfach das Register um und dann geht
es.

Gruß Mattias
Gast #76965
By the way
fällt mir gerade ein. Was ist eigentlich der Unterschied zwischen
SIGNAL() und INTERRUPT() hatte schonma flüchtig in der doku geguckt und
nichts gefunden kann aber sien das ich es übersehen hab...
Gast #76966
@Matthias:

Nein, der wird bei SIGNAL wirklich nicht zweimal ausgelöst, allerdings
mußt Du den externen Interrupt natürlich innerhalb von SIGNAL
umgehend erstmal totlegen.

@ape:

gähn Das ist schon so oft diskutiert worden, daß Du damit bei jeder
Suchmaschine ...zig Treffer finden solltest (auch in diesem Forum
hier), außerdem steht's in der Doku.

Kurz: `INTERRUPT' ist `interruptible', `SIGNAL' nicht.
Gast #76967
dacht ich mir beinahe...

wie gesagt viel mir so spontan ein
und ja ich gestehe ich war in diesem augenblick zu faul eine
suchmaschine zu verwenden

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.