我使用Veins-4a2,我修改了演示示例的场景。我添加了一个新的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:模型错误:ASSERT:条件函数handleUpperMsg中的useSCH false,veins / modules / mac / ieee80211p / Mac1609_4.cc第259行。
我是否无权重新使用SCH通道获取ACK消息? 我该如何解决这个问题?
答案 0 :(得分:0)
静脉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正确地识别了这一点并中止了您的模拟。