使用freemodbus时断言 RT_ASSERT( eRcvState == STATE_RX_IDLE ). 想查是什么原因, 故将此断言屏蔽, 然后添加打印信息
BOOL
xMBRTUTransmitFSM( void )
{
BOOL xNeedPoll = FALSE;
//RT_ASSERT( eRcvState == STATE_RX_IDLE );
rt_enter_critical();
if((int)eRcvState != 1)
{
rt_kprintf("r%xr",(int)eSndState);
if((int)eRcvState != 1)
{
rt_kprintf("c%dc",(int)eRcvState);
}
}
rt_exit_critical();
switch ( eSndState )
{
/* We should not get a transmitter event if the transmitter is in
idle state. /
case STATE_TX_IDLE:
/ enable receiver/disable transmitter. /
vMBPortSerialEnable( TRUE, FALSE );
break;
case STATE_TX_XMIT:
/ check if we are finished. */
if( usSndBufferCount != 0 )
{
xMBPortSerialPutByte( ( CHAR )pucSndBufferCur );
pucSndBufferCur++; / next byte in sendbuffer. /
usSndBufferCount--;
}
else
{
xNeedPoll = xMBPortEventPost( EV_FRAME_SENT );
/ Disable transmitter. This prevents another transmit buffer
empty interrupt. */
vMBPortSerialEnable( TRUE, FALSE );
eSndState = STATE_TX_IDLE;
}
break;
}
return xNeedPoll;
}
但是发现很奇怪的现象, 如图:

但是从逻辑上分析, 进入时eRcvState一定为1.
想问下什么情况会出现此现象.
加了临界区, 所以应该没有别的线程能改, 然后查了所有线程的内存, 没有溢出现象