System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据处理,具体涉及一种总线数据的处理方法及装置。
技术介绍
1、目前汽车主流的总线应用类型包括can、canfd、lin、ethernet,在车辆研发、测试、生产、售后等全生命周期内,对车辆总线数据的监控采集和节点仿真,具有非常重要的实际应用价值,当前业内主流的做法是基于一个车辆总线接口卡设备,通过usb连接到电脑,将车载总线数据封装成usb数据帧,上位机程序读取usb数据帧并解析转换到对应的总线数据结构化内存中,实现对车辆总线数据的读取和发送。
2、现有技术中,采用联合体对多种总线数据进行等额内存拷贝存取,其不考虑实际的总线数据类型,均基于联合体大小即最大长度进行内存开辟,导致内存占用过大以及数据冗余问题。
3、因此,如何考虑实际的总线数据类型进行存取,以实现解决内存占用过大以及数据冗余问题的目的,是目前急需考虑的。
技术实现思路
1、有鉴于此,本专利技术实施例提供一种总线数据的处理方法及装置,以实现解决内存占用过大以及数据冗余问题的目的。
2、为实现上述目的,本专利技术实施例提供如下技术方案:
3、本专利技术实施例第一方面公开了一种总线数据的处理方法,所述方法包括:
4、获取总线数据包;
5、将所述总线数据包中的总线数据,赋值到预先在缓存层的静态内存区创建的第一静态变量;所述第一静态变量的结构类型为用于存储多种总线数据包的rxservice结构类型;
6、将所述第一静态变量中的总线
7、将所述总线数据包副本对应的指针存储到预先构建的单向队列;
8、响应于应用层的提取操作,提取所述单向队列中的指针,将所述指针对应的总线数据包副本差额拷贝到第二静态变量,并释放所述总线数据包副本在缓存层占用的内存;所述第二静态变量预先在所述应用层构建,所述第二静态变量为rxservice结构类型。
9、优选的,所述获取总线数据包,包括:
10、获取车辆总线接口卡设备封装总线数据包得到的usb数据帧;
11、基于usb应用协议,对所述usb数据帧进行截取和解析,得到所述总线数据包。
12、优选的,所述将所述第一静态变量中的总线数据,去冗余拷贝到与所述总线数据长度一致的uint8*结构类型的指针变量中,得到总线数据包副本以及对应的指针,并清空所述第一静态变量中的数据,包括:
13、利用字节对齐方式,计算所述第一静态变量中的总线数据实际占用的字节长度;
14、在所述缓存层的堆内存中,创建与所述第一静态变量中的总线数据实际占用的字节长度一致的uint8*结构类型的指针变量中;
15、基于字节对齐方式以及所述第一静态变量中的总线数据,对所述指针变量进行去冗余拷贝,得到总线数据包副本以及对应的指针;
16、清空所述第一静态变量中的数据。
17、优选的,所述响应于应用层的提取操作,提取所述单向队列中的指针,将所述指针对应的总线数据包副本差额拷贝到第二静态变量,并释放所述总线数据包副本在缓存层占用的内存,包括:
18、响应于应用层的提取操作,提取所述单向队列中的指针,将所述指针强制转换为rxservice结构类型的指针;
19、采用差额拷贝的方式,将rxservice结构类型的指针对应的总线数据包副本拷贝至所述第二静态变量,并对所述第二静态变量剩余的字节长度进行填充;
20、释放所述总线数据包副本在缓存层占用的内存。
21、优选的,所述采用差额拷贝的方式,将rxservice结构类型的指针对应的总线数据包副本拷贝至所述第二静态变量,包括:
22、将rxservice结构类型的指针对应的总线数据包副本拷贝至所述第二静态变量;
23、若所述第二静态变量中存在剩余字节长度,利用无效数据对剩余的字节长度进行填充。
24、优选的,所述释放所述总线数据包副本在缓存层占用的内存,包括:
25、调用c++中的内存释放语句,对uint8*结构类型的总线数据包副本在缓存层占用的内存进行释放。
26、本专利技术实施例第二方面公开了一种总线数据的处理装置,所述装置包括:
27、获取单元,用于获取总线数据包;
28、赋值单元,用于将所述总线数据包中的总线数据,赋值到预先在缓存层的静态内存区创建的第一静态变量;所述第一静态变量的结构类型为用于存储多种总线数据包的rxservice结构类型;
29、拷贝单元,用于将所述第一静态变量中的总线数据,去冗余拷贝到与所述总线数据长度一致的uint8*结构类型的指针变量中,得到总线数据包副本以及对应的指针,并清空所述第一静态变量中的数据;所述uint8*结构类型的指针变量位于所述缓存层的堆内存;
30、存储单元,用于将所述总线数据包副本对应的指针存储到预先构建的单向队列;
31、提取单元,用于响应于应用层的提取操作,提取所述单向队列中的指针,将所述指针对应的总线数据包副本拷贝到第二静态变量,并释放所述总线数据包副本在缓存层占用的内存;所述第二静态变量预先在所述应用层构建,所述第二静态变量为rxservice结构类型。
32、优选的,所述获取单元,具体用于:
33、获取车辆总线接口卡设备封装总线数据包得到的usb数据帧;
34、基于usb应用协议,对所述usb数据帧进行截取和解析,得到所述总线数据包。
35、优选的,所述拷贝单元,具体用于:
36、利用字节对齐方式,计算所述第一静态变量中的总线数据实际占用的字节长度;
37、在所述缓存层的堆内存中,创建与所述第一静态变量中的总线数据实际占用的字节长度一致的uint8*结构类型的指针变量中;
38、基于字节对齐方式以及所述第一静态变量中的总线数据,对所述指针变量进行去冗余拷贝,得到总线数据包副本以及对应的指针;
39、清空所述第一静态变量中的数据。
40、优选的,所述提取单元,包括:
41、提取子单元,用于响应于应用层的提取操作,提取所述单向队列中的指针,将所述指针强制转换为rxservice结构类型的指针;
42、拷贝子单元,用于采用差额拷贝的方式,将rxservice结构类型的指针对应的总线数据包副本拷贝至所述第二静态变量,并对所述第二静态变量剩余的字节长度进行填充;
43、释放子单元,用于释放所述总线数据包副本在缓存层占用的内存。
44、基于上述本专利技术实施例提供的一种总线数据的处理方法及装置,获取总线数据包;将所述总线数据包中的总线数据,赋值到预先在缓存层的静态本文档来自技高网...
【技术保护点】
1.一种总线数据的处理方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述获取总线数据包,包括:
3.根据权利要求1所述的方法,其特征在于,所述将所述第一静态变量中的总线数据,去冗余拷贝到与所述总线数据长度一致的uint8*结构类型的指针变量中,得到总线数据包副本以及对应的指针,并清空所述第一静态变量中的数据,包括:
4.根据权利要求1所述的方法,其特征在于,所述响应于应用层的提取操作,提取所述单向队列中的指针,将所述指针对应的总线数据包副本差额拷贝到第二静态变量,并释放所述总线数据包副本在缓存层占用的内存,包括:
5.根据权利要求4所述的方法,其特征在于,所述采用差额拷贝的方式,将RxService结构类型的指针对应的总线数据包副本拷贝至所述第二静态变量,包括:
6.根据权利要求4所述的方法,其特征在于,所述释放所述总线数据包副本在缓存层占用的内存,包括:
7.一种总线数据的处理装置,其特征在于,所述装置包括:
8.根据权利要求7所述的装置,其特征在于,所述获取单元,
9.根据权利要求7所述的装置,其特征在于,所述拷贝单元,具体用于:
10.根据权利要求7所述的装置,其特征在于,所述提取单元,包括:
...【技术特征摘要】
1.一种总线数据的处理方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述获取总线数据包,包括:
3.根据权利要求1所述的方法,其特征在于,所述将所述第一静态变量中的总线数据,去冗余拷贝到与所述总线数据长度一致的uint8*结构类型的指针变量中,得到总线数据包副本以及对应的指针,并清空所述第一静态变量中的数据,包括:
4.根据权利要求1所述的方法,其特征在于,所述响应于应用层的提取操作,提取所述单向队列中的指针,将所述指针对应的总线数据包副本差额拷贝到第二静态变量,并释放所述总线数据包副本在缓存层占用的内存,包括...
【专利技术属性】
技术研发人员:赵晓亮,刘振宇,张学换,
申请(专利权)人:北京经纬恒润科技股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。