Hallo,
ich habe eine TWInet-Process, fast 1:1 aus den Beispielen
Aus dem Mainloop heraus schalte ich diesen Process gelegentlich mit einem suspend ab, um Ihn bei Bedarf wieder aufzuwecken. Dabei stellte ich fest, dass meine rote LED blinkt, obwohl auf dem I2C-Bus definitiv nichts los war.
Nach langem Suchen habe ich mich dann an die Aussage von rh erinnert:
Der Process stand in WaitSema(TWIrxSEMA); Dann kam aus dem Main das suspend. Nächste Zeile im Process ist Toggle(LEDRot); Und die wird jetzt wie beschrieben ausgeführt.
Vermeintliches Wunder war also doch keins!
Viele Grüße bei minus 12° aus Petershagen!
Rolf
ich habe eine TWInet-Process, fast 1:1 aus den Beispielen
Code
Process RxMasterFrame(40, 80 : iData);
var
ww : word;
begin
WaitSema(TWIrxSEMA);
Toggle(LEDRot);
case NetRxRec.cmd of
'1' : NetTxRec.Result:= '1';
NetTxRec.stS:= 'Result 1';
TWItxFrame(02, byte(sizeOf(tNetTxRec)));
|
'2' : NetTxRec.Result:= '2';
NetTxRec.stS:= 'Result 2';
TWItxFrame(02, byte(sizeOf(tNetTxRec)));
|
'3' : Lock(self); // do not disturb the beeper by scheduling :-)
BeepChirpH(1);
UnLock(self);
|
endcase;
// This is mandatory !!!
// The master can not send another frame until the slave has processed
// the frame and flags this by the "TWIrxClear" function.
TWIRXCLEAR;
end;
var
ww : word;
begin
WaitSema(TWIrxSEMA);
Toggle(LEDRot);
case NetRxRec.cmd of
'1' : NetTxRec.Result:= '1';
NetTxRec.stS:= 'Result 1';
TWItxFrame(02, byte(sizeOf(tNetTxRec)));
|
'2' : NetTxRec.Result:= '2';
NetTxRec.stS:= 'Result 2';
TWItxFrame(02, byte(sizeOf(tNetTxRec)));
|
'3' : Lock(self); // do not disturb the beeper by scheduling :-)
BeepChirpH(1);
UnLock(self);
|
endcase;
// This is mandatory !!!
// The master can not send another frame until the slave has processed
// the frame and flags this by the "TWIrxClear" function.
TWIRXCLEAR;
end;
Aus dem Mainloop heraus schalte ich diesen Process gelegentlich mit einem suspend ab, um Ihn bei Bedarf wieder aufzuwecken. Dabei stellte ich fest, dass meine rote LED blinkt, obwohl auf dem I2C-Bus definitiv nichts los war.
Nach langem Suchen habe ich mich dann an die Aussage von rh erinnert:
Quote
Bei einem Prozess wird nach einem Resume wieder da weitergemacht wo das Suspend stand, also hinter dem Suspend.
Der Process stand in WaitSema(TWIrxSEMA); Dann kam aus dem Main das suspend. Nächste Zeile im Process ist Toggle(LEDRot); Und die wird jetzt wie beschrieben ausgeführt.
Vermeintliches Wunder war also doch keins!
Viele Grüße bei minus 12° aus Petershagen!
Rolf