MSP430 atomic functions

OP #7374004
Lesenswert?
• ▲
▼

Hi, Ich möchte eine Funktion atomic machen, indem ich global interrupts aus und einschalte. Also zB.:

1
void func()
2
{
3
  _DEINT();
4
  _NOP();
5

6
  // EXECUTE ATOMIC OPERATION
7

8
  _EINT();
9
}

Muss man hier noch was beachten? Wird ein Interrupt, der während der atomic operation auftreten sollte, ab _EINT() behandelt oder "verliert" man den gänzlich?

#7374242
Lesenswert?
• ▲
▼

Es empfiehlt sich oft, den vorherigen Zustand hinsichtlich Interrupts vorsichtshalber wiederherzustellen, statt hart einzuschalten. Irgendwer verwendet später die Funktion vielleicht in einem Kontext mit bereits deaktivierten Interrupts, und dann gibts ab und zu seltsame und höllisch schwer erfassbare Effekte.

OP #7374270
Lesenswert?
• ▲
▼

(prx) A. K. schrieb:

Es empfiehlt sich oft, den vorherigen Zustand hinsichtlich Interrupts vorsichtshalber wiederherzustellen, statt hart einzuschalten. Irgendwer verwendet später die Funktion vielleicht in einem Kontext mit bereits deaktivierten Interrupts, und dann gibts ab und zu seltsame und höllisch schwer erfassbare Effekte.

Danke! Was ist gemeint mit "Zustand hinsichtlich Interrupts widerherstellen"? Gibt es beim MSP430 dafür einen Befehl? Oder muss man einfach das Status-Register auf den Stack werfen und nachher wieder einlesen?

#7374284
Lesenswert?
• ▲
▼

Tom M. schrieb:

Danke! Was ist gemeint mit "Zustand hinsichtlich Interrupts widerherstellen"? Gibt es beim MSP430 dafür einen Befehl?

Nein. Der MSP430 selber hat dafür keinen "Befehl".

Oder muss man einfach das Status-Register auf den Stack werfen und nachher wieder einlesen?

Typisch wird man für sowas nicht den Stack gebrauchen, sondern ein MCU-Register. Schon das ist ja teuer genug, zumal es in einer "Hochsprache" ohne weitere Maßnahmen erstmal keine freien Register gibt. Der bestmögliche Workaround in einer "Hochsprache" ist es, die dafür vorgesehenen Funktionen (oder auch: Makros) zu benutzen. Das ist aber Target-spezifisch. Muß man einfach die Doku des Compilers für das Target lesen. Oft ist sowas als "atomic" deklariert. Also einfach mal die (richtige!) Doku danach durchsuchen.

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.