Servus,
ich benutze den FreeModbus Stack für den MSP430:
http://freemodbus.berlios.de/.
Die Initialisierung der seriellen Schnittstelle sieht folgendermaßen
aus:
1 | if( bInitialized )
|
2 | {
|
3 | ENTER_CRITICAL_SECTION( );
|
4 | …
|
5 | EXIT_CRITICAL_SECTION( );
|
6 | }
|
wobei
1 | void EnterCriticalSection( void )
|
2 | {
|
3 | USHORT usOldSR;
|
4 | if( ucCriticalNesting == 0 )
|
5 | {
|
6 | #if defined (__GNUC__)
|
7 | usOldSR = READ_SR;
|
8 | _DINT( );
|
9 | #else
|
10 | usOldSR = _DINT( );
|
11 | #endif
|
12 | ucGIEWasEnabled = usOldSR & GIE ? TRUE : FALSE;
|
13 | }
|
14 | ucCriticalNesting++;
|
15 | }
|
Frage 1: Dieser Prozess sieht kompliziert aus. Kann man diese
if-Anweisung und die Methode ENTER_CRITICAL_SECTION() wegmachen? Sowieso
geschieht die Initialisierung nur einmal am Anhang!
Frage 2: Die Methode ENTER_CRITICAL_SECTION() ist auch kompliziert. Kann
man diese vereinfachen:
In EnterCriticalSection(): globale Interrupts deaktivieren
In ExitCriticalSection(): globale Interrupts aktivieren?
Viele Grüße
Senmeis