Error in module (Mac1609_4) Model error: ASSERT: condition useSCH false in function handleUpperMsg
Error in module (Mac1609_4) Model error: ASSERT: condition useSCH false in function handleUpperMsg
我用的是Veins-4a2,修改了demo例子的场景。我添加了一个新的 wsm,当节点收到消息时它是 ACK,它向源节点发送 ACK 消息。
我在 onData() 函数中添加了这一行:
sendWSM(prepareWSM("ack", ackLengthBits, type_SCH, ackPriority, sourcenode.idNode, 2));
我确实更改了 BaseWaveApplLayer.cc 中的 prepareWSM 和 handleLowerMsg() 函数,但是当我执行模拟时,它会在 10 秒后崩溃。这是错误消息:
模块错误 (Mac1609_4) RSUExampleScenario.node[2].nic.mac1609_4 (id=240) 在事件 #1196,t=9.210177776741:模型错误:断言:函数 handleUpperMsg 中的条件 useSCH 为假,veins/modules/mac/ieee80211p/Mac1609_4.cc 第 259 行。
难道我没有权利为ACK报文重用SCH信道?
请问我该如何解决这个问题?
Veins 4a2 的 1609.4 MAC 层可用于两种操作模式之一:单通道和多通道。可以通过设置 .ned 文件的此参数来配置行为:
// cycle between an SCH and the CCH (or stay on CCH all the time)
bool useServiceChannel = default(true);
从您发布的错误消息来看,您似乎已将此参数设置为 false
,这意味着您希望无线电始终保持在控制信道 (CCH) 上。同时,您发布的代码请求通过服务频道 (SCH) 传输消息。
您因此要求互斥行为。
Veins 正确识别了这一点并中止了您的模拟。
我用的是Veins-4a2,修改了demo例子的场景。我添加了一个新的 wsm,当节点收到消息时它是 ACK,它向源节点发送 ACK 消息。 我在 onData() 函数中添加了这一行:
sendWSM(prepareWSM("ack", ackLengthBits, type_SCH, ackPriority, sourcenode.idNode, 2));
我确实更改了 BaseWaveApplLayer.cc 中的 prepareWSM 和 handleLowerMsg() 函数,但是当我执行模拟时,它会在 10 秒后崩溃。这是错误消息:
模块错误 (Mac1609_4) RSUExampleScenario.node[2].nic.mac1609_4 (id=240) 在事件 #1196,t=9.210177776741:模型错误:断言:函数 handleUpperMsg 中的条件 useSCH 为假,veins/modules/mac/ieee80211p/Mac1609_4.cc 第 259 行。
难道我没有权利为ACK报文重用SCH信道? 请问我该如何解决这个问题?
Veins 4a2 的 1609.4 MAC 层可用于两种操作模式之一:单通道和多通道。可以通过设置 .ned 文件的此参数来配置行为:
// cycle between an SCH and the CCH (or stay on CCH all the time) bool useServiceChannel = default(true);
从您发布的错误消息来看,您似乎已将此参数设置为 false
,这意味着您希望无线电始终保持在控制信道 (CCH) 上。同时,您发布的代码请求通过服务频道 (SCH) 传输消息。
您因此要求互斥行为。
Veins 正确识别了这一点并中止了您的模拟。