mikrocontroller.net

Forum: Compiler & IDEs Deep problem MSP longjmp


Autor: Christian Rötzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Yagan Z. Dongobar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.