金牌会员
 
- 积分
- 1181
- 金钱
- 1181
- 注册时间
- 2018-4-13
- 在线时间
- 170 小时
|
1金钱
今天测试Modbus-RTU从站通讯,从站判断主站请求的功能使用了switch case,发现default中的通讯不能正常执行。
default里面的函数是在遇到不支持的从站功能时执行,用模拟软件发出不支持的功能,每次都在default函数里不能出来,死机。
default执行的函数和其他情况下的函数没有特殊的地方。
我把default执行的函数替换成支持的功能函数,一样出现死机。
[mw_shl_code=c,true] //提取功能码做判断
switch(RX_Struct.Buffer[1]){
case 0x01:SlaveFunc_0x01(); //读多个DQ_0xxxx
break;
case 0x0F:SlaveFunc_0x0F(); //写多个DQ_0xxxx
break;
case 0x02:SlaveFunc_0x02(); //读多个DI_1xxxx
break;
case 0x04:SlaveFunc_0x04(); //读多个AI_3xxxx
break;
case 0x03:SlaveFunc_0x03(); //读多个HoldReg_4xxxx
break;
case 0x10:SlaveFunc_0x10(); //写多个HoldReg_4xxxx
break;
default: //Default_NonSupport(); //不支持的功能处理。
SlaveFunc_0x01();
}[/mw_shl_code]
这是代码片段。
Default_NonSupport()的实现和其他情况下的函数类似,只是数据不同。
换成SlaveFunc_0x01()还是死机。
SlaveFunc_0x01()在case 0x01时是正常执行的。
我把Default_NonSupport()里面的通信功能SendFrame()去掉后正常。
SendFrame()里面调用了USART2串口通信。
--------------
情况就是default里面如果有USART2通信就不行了。
换成USART1是正常的。
乱了。
|
|