Forum: Compiler & IDEs Deep problem MSP longjmp


von Christian Rötzer (Gast)


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

von Yagan Z. Dongobar (Gast)


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

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.