Deep problem MSP longjmp

Gast #180288
Lesenswert?
• ▲
▼
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 #180289
Lesenswert?
• ▲
▼
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.