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