Deep problem MSP longjmp

Gast #180288
Hallo Gemeinde,

Ich habe hier einen interessanten Effekt: Ein MSP430F149 läuft in C
programmiert (einschließlich Interrupt) mit 30% Interruptauslastung.
Wenn ich im Hauptprogramm einen longjmp durchführe, der ja den Stack
und den restlichen Registersatz auf gespeicherte Werte zurücksetzt,
schmiert mir das System ab. Dies macht sich z.B. dadurch bemerkbar, daß
kein Interrupt mehr ausgelöst wird.
Wenn ich nun während des longjmp's (also DI vor longjmp und EI nach
setjmp) funktioniert alles. Das ist ja im Grunde genommen prima, nur
habe ich keine Erklärung dafür und daher bin ich etwas beunruhigt.

Hat jemand eine Idee woran das liegen kann?

Grüße

Christian
Gast
Christian,

es könnte sein, dass in Deinem Projekt nicht die richtige
Laufzeitbiliothek für Interruptbetrieb gelinkt wird. Wenn Interrupts
benutzt werden, müssen nämlich die Laufzeitfunktion, die der Compiler
zur Verfügung stellt, wiedereintrittsfähig (reentrant) sein, damit es
keine Interferenzen zwischen Hauptprogramm und Unterbrechungen gibt.

Eine andere Möglichkeit wäre, dass der setjmp/longjmp-Code suboptimal
implementiert wurde und nicht 'interruptsicher' ist. Das ist nicht
ganz unwahrscheinlich, da dieses Verfahren praktisch einen simplen
Mechanismus zur Kontextumschaltung darstellt, der Stack und Register
manipuliert. Wenn das nicht sauber programmiert ist, kann ein Interrupt
durchaus etwas zerstören.

Ciao,

Yagan

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 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.