我试图在x-mac协议中实现数据确认.该算法是,在分组传输结束后,发送节点将等待接收方的确认。为此,我添加了一个新的状态WAIT_ACK。但是在运行时,我可以看到节点不能进行从WAIT_TX_DATA_OVER到WAIT_ACK的状态转换。我得到了以下错误。
在状态7(无线电状态2)中的204类型的未定义事件!- in模块(内:XMac1 1) SensorNetworkShowcaseA.sensor3.wlan.mac (id=181),at t=0.10677288732s,事件#62
注:XMAC1_DATA_TX_OVER = 204,状态7为WAIT_ACK
case SEND_DATA:
if (msg->getKind() == XMAC1_STOP_PREAMBLES) {
sendDataPacket();
macState = WAIT_TX_DATA_OVER;
return;
}
else if (msg->getKind() == XMAC1_SWITCHING_FINISHED) {
sendDataPacket();
macState = WAIT_TX_DATA_OVER;
return;
}
else {
return;
}
break;
case WAIT_TX_DATA_OVER:
if (msg->getKind() == XMAC1_DATA_TX_OVER) {
scheduleAt(simTime() + (slotDuration / 2), data_ack_timeout);
macState = WAIT_ACK;
radio->setRadioMode(IRadio::RADIO_MODE_RECEIVER);
changeDisplayColor(GREEN);
}
break;
case WAIT_ACK:
if (msg->getKind() == XMAC1_DATA_TX_OVER) {
delete msg;
return;
}
...
}
break;更新
在运行时,下面是执行停止后我可以看到的内容
(XMac1)SensorNetworkShowcaseA.sensor3.wlan.mac:信息节点0A-AA-00-00-00-04 :状态WAIT_TX_DATA_OVER,消息XMAC_DATA_TX_OVER,新状态XMAC_DATA_TX_OVER:无线电模式从发送器改为接收器。INFO (ApskScalarRadio)SensorNetworkShowcaseA.sensor3.wlan.radio: SensorNetworkShowcaseA.sensor3.wlan.radio:将无线电接收状态从未定义更改为空闲。INFO (ApskScalarRadio)SensorNetworkShowcaseA.sensor3.wlan.radio: SensorNetworkShowcaseA.sensor3.wlan.radio:将无线传输状态从空闲更改为未定义。在状态7(无线电状态2)中的204类型的未定义事件!- in模块(内:XMac1 1) SensorNetworkShowcaseA.sensor3.wlan.mac (id=181),at t=0.10677288732s,事件#62
发布于 2021-07-06 06:59:35
根据你提供的信息,这是不应该发生的,所以你的假设中的某些东西是错误的。很可能,您没有运行这段代码。确保确实执行了这段代码(您可以构建一个发布版本并运行调试版本或其他什么)。在这些情况下,我经常临时修改代码中的错误消息,以查看代码更改是否真的被编译到可执行文件中,只是为了确保我正在运行我假设运行的代码。
https://stackoverflow.com/questions/68265654
复制相似问题