|
@@ -153,8 +153,14 @@ eMBRTUReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, USHORT * pusLength )
|
|
|
eMBErrorCode eStatus = MB_ENOERR;
|
|
eMBErrorCode eStatus = MB_ENOERR;
|
|
|
|
|
|
|
|
ENTER_CRITICAL_SECTION( );
|
|
ENTER_CRITICAL_SECTION( );
|
|
|
- assert( usRcvBufferPos < MB_SER_PDU_SIZE_MAX );
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
+ //assert( usRcvBufferPos < MB_SER_PDU_SIZE_MAX );
|
|
|
|
|
+ if(usRcvBufferPos >= MB_SER_PDU_SIZE_MAX)
|
|
|
|
|
+ {
|
|
|
|
|
+ eMBDisable();
|
|
|
|
|
+ EXIT_CRITICAL_SECTION( );
|
|
|
|
|
+ return eStatus;
|
|
|
|
|
+ }
|
|
|
/* Length and CRC check */
|
|
/* Length and CRC check */
|
|
|
if( ( usRcvBufferPos >= MB_SER_PDU_SIZE_MIN )
|
|
if( ( usRcvBufferPos >= MB_SER_PDU_SIZE_MIN )
|
|
|
&& ( usMBCRC16( ( UCHAR * ) ucRTUBuf, usRcvBufferPos ) == 0 ) )
|
|
&& ( usMBCRC16( ( UCHAR * ) ucRTUBuf, usRcvBufferPos ) == 0 ) )
|
|
@@ -237,11 +243,13 @@ xMBRTUReceiveFSM( void )
|
|
|
BOOL xTaskNeedSwitch = FALSE;
|
|
BOOL xTaskNeedSwitch = FALSE;
|
|
|
UCHAR ucByte;
|
|
UCHAR ucByte;
|
|
|
|
|
|
|
|
- assert( eSndState == STATE_TX_IDLE );
|
|
|
|
|
-// if(eSndState == STATE_TX_IDLE)
|
|
|
|
|
-// {
|
|
|
|
|
-// return xTaskNeedSwitch;
|
|
|
|
|
-// }
|
|
|
|
|
|
|
+ //assert( eSndState == STATE_TX_IDLE );
|
|
|
|
|
+ if(eSndState != STATE_TX_IDLE)
|
|
|
|
|
+ {
|
|
|
|
|
+ eMBDisable();
|
|
|
|
|
+ return xTaskNeedSwitch;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/* Always read the character. */
|
|
/* Always read the character. */
|
|
|
( void )xMBPortSerialGetByte( ( CHAR * ) & ucByte );
|
|
( void )xMBPortSerialGetByte( ( CHAR * ) & ucByte );
|
|
|
|
|
|
|
@@ -299,9 +307,16 @@ xMBRTUTransmitFSM( void )
|
|
|
{
|
|
{
|
|
|
BOOL xNeedPoll = FALSE;
|
|
BOOL xNeedPoll = FALSE;
|
|
|
|
|
|
|
|
- assert( eRcvState == STATE_RX_IDLE );
|
|
|
|
|
-// if(eRcvState == STATE_RX_IDLE )
|
|
|
|
|
|
|
+ //assert( eRcvState == STATE_RX_IDLE );
|
|
|
|
|
+ if(eRcvState != STATE_RX_IDLE)
|
|
|
|
|
+ {
|
|
|
|
|
+ eMBDisable();
|
|
|
|
|
+ return xNeedPoll;
|
|
|
|
|
+ }
|
|
|
|
|
+// if(eRcvState != STATE_RX_IDLE)
|
|
|
// {
|
|
// {
|
|
|
|
|
+// eMBDisable();
|
|
|
|
|
+// eMBRTUStart();
|
|
|
// return xNeedPoll;
|
|
// return xNeedPoll;
|
|
|
// }
|
|
// }
|
|
|
switch ( eSndState )
|
|
switch ( eSndState )
|
|
@@ -361,8 +376,13 @@ xMBRTUTimerT35Expired( void )
|
|
|
|
|
|
|
|
/* Function called in an illegal state. */
|
|
/* Function called in an illegal state. */
|
|
|
default:
|
|
default:
|
|
|
- assert( ( eRcvState == STATE_RX_INIT ) ||
|
|
|
|
|
- ( eRcvState == STATE_RX_RCV ) || ( eRcvState == STATE_RX_ERROR ) );
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ eMBDisable();
|
|
|
|
|
+ eRcvState = STATE_RX_IDLE;
|
|
|
|
|
+ return xNeedPoll;
|
|
|
|
|
+ // assert( ( eRcvState == STATE_RX_INIT ) ||
|
|
|
|
|
+ // ( eRcvState == STATE_RX_RCV ) || ( eRcvState == STATE_RX_ERROR ) );
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
vMBPortTimersDisable( );
|
|
vMBPortTimersDisable( );
|