目录
为什么在Windows系统中,解析后的门信号没有存在跳变情况
是否Windows 和Linux下 unordered_map中数据先后位置不一致
验证在相同输入下,在不同操作系统下,存储到队列中数据是否一致,在相同系统下,队列中数据存储是否一致
背景:
最近在开发一个从文件中解析CAN信号功能时,在Ubuntu系统中发现门信号的状态存在跳变情况,而在Windows系统中,门信号的状态正常。
问题分析:
-
使用APE工具,查看录制的原始门信号是否存在异常
有图可知,原始信号正常,而解析的门信号存在跳变。
-
查看报文读取是否存在问题
通过分析,发现从文件中解析出来的can报文就存在跳变情况。
-
分析报文读取代码
通过分析,发现在两个虚拟通道组中,存在相同的CAN 报文ID ,虚拟通道组分别为35和113。其中35通道组为CAN1通道为DBC文件中报文数据,而113通道组为CAN2通道,不在DBC文件中。
在进行CAN报文解析时,首先是按照虚拟通道组逐个进行解析,并且按照虚拟通道号为key值进行存储到unordered_map中。
在所有虚拟通道组解析完后,将CAN报文数据存储到以CAN ID为key值的unordered_map中。
当存在相同的CAN ID时,就会存在CAN 数据被覆盖的情况。
因此,是由于存在相同CAN ID,导致解析后报文数据别另一个CAN报文内容覆盖的情况,导致信号存在跳变。
-
为什么在Windows系统中,解析后的门信号没有存在跳变情况
通过分析,CAN报文从虚拟通道组解析后,存储到unordered_map中,由于unordered_map是无序,因此对于虚拟通道组3