最近在使用omnet的veins 时候出现错误,如下所示:
<!> Error in module (Mac1609_4) scenario.node[1579].nic.mac1609_4 (id=11066) at event #877979, t=29.404181564383: Model error: No packet was ready
在release模式下出现的错误,在debug模式下没有这个错误。
写了一些输出语句,对比如下:
1. debug模式下,13e-6 的double型正常转变为 0.000013.
2.release模式下,13e-6 的double型正常转变为 0.000012999999.
问题解释:
release模式下,由于优化,导致double本身在表示数据时候的准确度丢失,比如
0.5=2(-1);0.5就可以准确表示,但是0.1就不能完全由二进制数准确表示,于是产生准确度丢失。
解决方法:
一般的,可以将double转变成整型来处理。因为所有的整型数据都可以完全准确表示成二进制数据的组合。
omnet中,有相应的处理方法,simtime的setRaw()方法,就可以很好的解决这个问题。
如 SimTime().setRaw(13000000),就能够准确的表示 13e-6。于是本人将<Consts80211p.h>中的所有 有关802.11p的物理层参数改成上述setRaw方法。
bug得到解决。
本来想向veins反应此种情况,后来在最新的版本中,发现他们已经解决这个bug,把<Consts80211p.h>文件改了,同时把mac1609也改了。