Wo kann ich herausfinden ob es für den TI Compiler eine ATOMIC Anweisung gibt? D.h. Interrupts sichern und deaktivieren..
Die ist hier zu finden: http://www.ti.com/lit/pdf/slau132 (leitet auf die aktuelle rev. E um). Aber wo muss ich suchen? Ist das nicht ein Makro-Block? Oder reicht ab- und wieder anschalten der Interrupts aus?
Naja, beim Abschalten müsstest du dir den aktuellen Status des GIE Bits merken, denn wenn es aus war, musst/solltest du es nachher nicht wieder aktivieren. Beim GCC gibts für Funktionen das "critical" Attribut, was genau das macht. Eventuell gibts das beim CCE auch.
Christian R. schrieb: > denn wenn es aus war, musst/solltest du es nachher nicht wieder > aktivieren. Warum sollte man GIE nicht beliebig deaktivieren und aktivieren?
Vielleicht war ja der GIE vor dem zu schützdenden Befehl oder Block nicht umsonst deaktiviert? Aber das weiß nur der Programmierer selber.
lösen EINT (enable Interrupt )und DINT (disable Interrupt) das Problem ? sehr komplex das Thema muss ich auch immer ins Buch gucken . mfg Erik
Das ist eben nicht alles. Wie geschrieben, es kann sein, dass aus gutem Grund vorher die Interrupts aus waren. Dann wäre esfatal, wenn man sie einfach so aktiviert....
Geht's so?
1 | unsigned short SR_save; |
2 | |
3 | void cli( void ) |
4 | {
|
5 | SR_save = _get_interrupt_state(); |
6 | _disable_interrupt(); |
7 | }
|
8 | |
9 | void sei( void ) |
10 | {
|
11 | _set_interrupt_state( SR_save ); |
12 | _enable_interrupt(); |
13 | __no_operation(); |
14 | }
|
Siehe slau132 6.7.1 MSP430 Intrinsics
Wohl eher so:
1 | unsigned short SR_save; |
2 | |
3 | void cli( void ) |
4 | {
|
5 | SR_save = _get_interrupt_state(); |
6 | _disable_interrupt(); |
7 | }
|
8 | |
9 | void sei( void ) |
10 | {
|
11 | _set_interrupt_state( SR_save ); |
12 | // _enable_interrupt();
|
13 | __no_operation(); |
14 | }
|
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.