FreeModbus_Slave-Master-RTT-STM32 icon indicating copy to clipboard operation
FreeModbus_Slave-Master-RTT-STM32 copied to clipboard

xMBMasterRTUTransmitFSM函数触发断言

Open DavidLin1577 opened this issue 4 years ago • 2 comments

原代码如下: vMBMasterPortSerialEnable( TRUE, FALSE ); eSndState = STATE_M_TX_XFWR; 这种情况会在接收函数xMBMasterRTUReceiveFSM()触发断言 RT_ASSERT(( eSndState == STATE_M_TX_IDLE ) || ( eSndState == STATE_M_TX_XFWR ));

修改如下解决: eSndState = STATE_M_TX_XFWR; vMBMasterPortSerialEnable( TRUE, FALSE ); //eSndState = STATE_M_TX_XFWR;

问题原因是状态更新不及时,接收中断触发了,变量状态还没有更新,所以还要提前 不过我不知道原作者和其他用户是否遇到这种问题,所以抛砖引玉,armink看到也请分析一下,谢谢

DavidLin1577 avatar Dec 11 '20 01:12 DavidLin1577

上面改法也是存在问题的,虽然可以正常写,但是返回值错误

DavidLin1577 avatar Dec 11 '20 07:12 DavidLin1577

遇到了同样的问题,这个问题的复现调试是 从机延时响应,例如我用 modbus slave 这个上位机

image

那么就会触发这个断言

whj4674672 avatar Apr 13 '21 10:04 whj4674672