0

我使用 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) at event #1196, t=9.210177776741: Model error: ASSERT: condition useSCH false in function handleUpperMsg, avenues/modules/mac/ieee80211p/ Mac1609_4.cc 第 259 行。

是不是我无权重用 SCH 信道来发送 ACK 消息?请问我该如何纠正这个问题?

4

1 回答 1

0

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 正确识别了这一点并中止了您的模拟。

于 2016-07-11T13:19:12.347 回答