一种双处理器核间通信方法、装置、TBOX及存储介质与流程

未命名 08-13 阅读:88 评论:0

一种双处理器核间通信方法、装置、tbox及存储介质
技术领域
1.本技术涉及基础通信设备领域,尤其涉及一种双处理器核间通信方法、装置、tbox及存储介质。


背景技术:

2.目前的tbox(telematics box,远程信息处理盒子)的双处理器核间通信框架的结构如图1所示,传统的双处理器核间通信机制一般是通过在发送端/接收端处设置缓冲区来做io缓冲,并基于uart(universal asynchronous receiver/transmitter,通用异步收发传输器)和简单的包装协议来实现的。其中,包装协议一般采用“消息头”+“命令字”+“数据内容”+“校验”+“消息尾”的形式。
3.目前的双处理器核间通信机制至少存在如下不足之处:接收端/发送端仅仅依靠buffer缓冲设计的优劣来保证数据传输的稳定性,对io资源的消耗较大,且这种通信机制的抗干扰性较差,容易受到电磁干扰、链路干扰而导致数据传输不稳定;其次,当串口传输的速率较大(如采用921600bps的传输速率)时,上述的通信机制容易发生丢包现象,无法实现失误重传、大数据包传输、长时间可靠连接等功能,且通信成本较高。
4.可见,现有的双处理器核间通信机制仍存在数据传输不稳定、对io资源的消耗较大且通信成本较高的问题。


技术实现要素:

5.有鉴于此,本技术实施例提供了一种双处理器核间通信方法、装置、tbox及存储介质,以解决现有技术中双处理器核间通信机制仍存在数据传输不稳定、对io资源的消耗较大且通信成本较高的问题。
6.本技术实施例的第一方面,提供了一种双处理器核间通信方法,包括:
7.接收第一处理器传输过来的封装数据,封装数据是基于第一处理器与第二处理器预先协商好的封包协议进行封装得到的;
8.若封装数据包括残缺数据帧,则将残缺数据帧推入二级缓存池中;
9.根据残缺数据帧进行断帧拼接处理或漏帧续传处理或错帧重传处理,以获得完整数据帧,并将完整数据帧推出二级缓存池;
10.对完整数据帧进行解包处理,得到解封数据。
11.本技术实施例的第二方面,提供了一种双处理器核间通信装置,包括:
12.接收模块,被配置为接收第一处理器传输过来的封装数据,封装数据是基于第一处理器与第二处理器预先协商好的封包协议进行封装得到的;
13.推入模块,被配置为若封装数据包括残缺数据帧,则将残缺数据帧推入二级缓存池中;
14.处理模块,被配置为根据残缺数据帧进行断帧拼接处理或漏帧续传处理或错帧重传处理,以获得完整数据帧,并将完整数据帧推出二级缓存池;
15.解包模块,被配置为对完整数据帧进行解包处理,得到解封数据。
16.本技术实施例的第三方面,提供了一种tbox,包括第一处理器和第二处理器;
17.第一处理器和第二处理器基于串口进行核间通信;
18.第二处理器包括第二方面的双处理器核间通信装置。
19.本技术实施例的第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述方法的步骤。
20.本技术实施例与现有技术相比,其有益效果至少包括:本技术实施例提供的技术方案,通过在第一处理器与第二处理器之间增加采用预先协商好的封包协议进行数据封装、传输,可在传统的基于buffer缓冲设计的核间通信机制的基础上进一步提高数据传输的稳定性,并可减少对io资源的消耗,从而将传统廉价的串口性能发挥到极致。与此同时,通过在第二处理器中设计二级缓存池,用于暂存残缺数据帧,并根据残缺数据帧进行断帧拼接处理或漏帧续传处理或错帧重传处理,可实现在较高的传输速率(如采用921600bps的传输速率)下的大数据包的稳定传输,且传输过程中的丢包率较低,可实现双处理器之间的长时间可靠连接,进一步提高了第一处理器与第二处理器之间的数据传输的稳定性,并且可大大降低通信成本。
附图说明
21.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
22.图1是传统的双处理器核间通信框架的结构示意图;
23.图2是本技术实施例提供的一种双处理器核间通信框架的结构示意图;
24.图3是本技术实施例提供的一种双处理器核间通信方法的流程示意图;
25.图4是本技术实施例提供的一种数据/消息接收方法的流程示意图;
26.图5是本技术实施例提供的一种数据/消息发送方法的流程示意图;
27.图6是本技术实施例提供的一种双处理器核间通信装置的结构示意图;
28.图7是本技术实施例提供的一种tbox的结构示意图;
29.图8是本技术实施例提供的一种电子设备的结构示意图。
具体实施方式
30.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本技术实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本技术。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本技术的描述。
31.下面将结合附图详细说明根据本技术实施例的一种双处理器核间通信方法和装置。
32.图2是本技术实施例的一种双处理器核间通信框架的结构示意图。该双处理器核间通信框架包括第一处理器201(简称“cpu1”)、第二处理器202(简称“cpu2”)。其中,第一处
理器201、第二处理器202之间可通过串口通信连接。
33.第一处理器201、第二处理器202,可以是结构不同且具备不同功能的处理器,例如,第一处理器201为linux芯片,第二处理器202为gpu(graphics processing unit,又称显示核心、视觉处理器、显示芯片或绘图芯片);也可以是设备型号不同、结构相同且具备不同功能的处理器。
34.第二处理器202中设置有二级缓存池。
35.核间通信技术(inter-processor communication,简称“ipc”)。
36.一般地,不同功能的处理器的应用场景差异很大。例如,如linux芯片主要应用于运行linux系统、gpu主要应用于图像处理、单片机主要用做做微控制器、dsp(digital signal processing,数字信号处理器)主要用于逻辑处理等。在现有技术中,如果想要将不同功能的处理器进行集成,为保证不同功能的处理器之间能够正常核间通信,通常只能选择特定型号或者定制的处理器进行集成,这样一方面会较大地限制将不同功能的处理器的集成应用,另一方面这种集成芯片的制备成本非常高,无法推广应用。
37.而现有的双处理器核间通信机制仍存在数据传输不稳定、对io资源的消耗较大且通信成本较高的问题。与此同时,现有技术鲜少有基于串口设计重传、定帧等方面的改进方案,且也鲜少有披露针对高速率(如传输速率为921600bps)传输下实现数据稳定传输的封包协议。
38.为解决目前双处理器核间通信机制仍存在数据传输不稳定、对io资源的消耗较大且通信成本较高的问题,本技术实施例提供的技术方案应用于第二处理器202,具体地,第二处理器202接收第一处理器201传输过来的封装数据,封装数据是基于第一处理器201与第二处理器202预先协商好的封包协议进行封装得到的;若封装数据包括残缺数据帧,则将残缺数据帧推入二级缓存池2021中;根据残缺数据帧进行断帧拼接处理或漏帧续传处理或错帧重传处理,以获得完整数据帧,并将完整数据帧推出二级缓存池2021;对完整数据帧进行解包处理,得到解封数据。本技术实施例提供的技术方案,通过在第一处理器与第二处理器之间增加一层ipc通信保障机制,该ipc通信保障机制采用预先协商好的封包协议进行数据封装、传输,可在传统的基于buffer缓冲设计的核间通信机制的基础上进一步提高数据传输的稳定性,并可减少对io资源的消耗,从而将传统廉价的串口性能发挥到极致。与此同时,通过在第二处理器中设计二级缓存池,用于暂存残缺数据帧,并对残缺数据帧进行断帧拼接处理或漏帧续传处理或错帧重传处理,可实现在较高的传输速率(如采用921600bps的传输速率)下的大数据包的稳定传输,且传输过程中的丢包率较低,可实现双处理器之间的长时间可靠连接,进一步提高了第一处理器与第二处理器之间的数据传输的稳定性,并且可大大降低通信成本。
39.需要说明的是,第一处理器201、第二处理器202的具体类型和组合可以根据应用场景的实际需求进行调整,本技术实施例对此不作限制。
40.图3是本技术实施例提供的一种双处理器核间通信方法的流程示意图。图3的双处理器核间通信方法可以由图2的第二处理器202执行。如图3所示,该双处理器核间通信方法包括:
41.步骤s301,接收第一处理器传输过来的封装数据,封装数据是基于第一处理器与第二处理器预先协商好的封包协议进行封装得到的。
42.在一实施方式中,封包协议包括帧定界域、定帧头后数据长度、消息属性、消息id、消息流水号、原始数据长度、原始数据以及校验码;消息属性包括分片数、分片序号、确认信号。
43.帧定界域,是指数据帧的定界,也可称为定帧头,用于标志一个完整数据帧的头部开始。在该封包协议中,可设定前6个字节为帧定界域。
44.定帧头后数据长度,用于标记定帧头后多少数据才算完整一帧。在该封包协议中,可以用两个字节来标记定帧头后数据长度。
45.消息属性,可采用两个字节来标记。消息属性的含义说明如下表1所示。
46.表1消息属性的含义说明
47.bit(位)12~158~114~730~2含义说明保留分片数分片序号ack加密方式
48.分片数,用于指示第一处理器将待传数据拆分成多少个分片数据进行传输。例如,将一个待传输数据拆分成3个分片数据进行传输,那么分片数为3。
49.分片序号,用于指示分片数据的序号,例如,将一个待传输数据拆分成3个分片数据(如拆分成分片数据1、分片数据2、分片数据3)进行传输,那么分片序号为1的代表分片数据1,分片序号为2的代表分片数据2,分片序号为3的代表分片数据3。
50.分片序号从1开始编号,若待传输数据(消息)没有分片时,分片数和分片序号都为1。
51.确认信号,即ack(acknowledgement)信号,确认字符,在数据通信中,接收方发给发送方的一种传输类控制字符。此位为“1”代表需要对方回应ack应答,为“0”代表对方不需要对方回应ack应答。
52.消息属性还可包括加密方式,bit0-bit2为数据加密标识位。在一些实施方式中,当此三位都为0,表示消息体不加密;当第1位为1,表示消息体经过加密(如经rsa算法加密)。
53.bit12~bit15保留。
54.消息id,对应各个信息的id,占两个字节(bytes),用于扩展协议的嵌套性。
55.消息流水号,占两个bytes,用于表明当前消息属于第一处理器(发送端)发送的第几条信息。
56.原始数据长度,即payload数据长度,受单片机和驱动配置限制,具备不同大小的有效payload数据。计算公式为:最大发送缓存buffer

17=payload长度。
57.原始数据,即payload数据。通常在传输数据时,为了使数据传输更可靠,要把原始数据分批传输,并且在每一批数据的头和尾都加上一定的辅助信息,比如数据量的大小、校验位(校验码)等,这样就相当于给已经分批的原始数据加一些外套,这些外套起标示作用,使得原始数据不易丢失,一批数据加上“外套”就形成了传输通道的基本传输单元,叫做数据帧或数据包,而其中的原始数据就是payload。
58.表2是本技术实施例提供的一种封包协议的数据帧结构。
59.表2
[0060][0061][0062]
作为一示例,假设待传输数据为“12345”,当前网络状况良好,且数据大小适宜,数据可一次性完整地被第二处理器202成功接收,那么第一处理器201可以按照上述封包协议,将该待传输数据为“12345”封装成“定帧头+定帧头后数据长度+消息id+消息属性+消息
流水号+payload数据长度+payload数据(“12345”)+校验码(check code)”的封装数据;然后,将该封装数据发送给第二处理器202。
[0063]
步骤s302,若封装数据包括残缺数据帧,则将残缺数据帧推入二级缓存池中。
[0064]
封装数据,可包括一个或多个数据帧。该数据帧可能为完整数据帧,也可能为残缺数据帧。
[0065]
作为一示例,假设一个完整数据帧含有n个字节,那么一个含有<n个字节的数据帧为残缺数据帧。示例性的,假设完整数据帧为“定帧头+定帧头后数据长度+消息id+消息属性+消息流水号+payload数据长度+payload数据(“12345”)+校验码(check code)”,若第二处理器202接收到的为“定帧头+定帧头后数据长度+消息id+消息属性+消息流水号+payload数据长度+payload数据(“1234”)+校验码(check code)”,即丢是了部分payload数据,那么第二处理器202接收到的数据帧为残缺数据帧。
[0066]
步骤s303,根据残缺数据帧进行断帧拼接处理或漏帧续传处理或错帧重传处理,以获得完整数据帧,并将完整数据帧推出二级缓存池。
[0067]
步骤s304,对完整数据帧进行解包处理,得到解封数据。
[0068]
解封数据,即系第一处理器未采用封包协议进行封包前的待传输数据。
[0069]
本技术实施例提供的技术方案,通过在第一处理器与第二处理器之间增加采用预先协商好的封包协议进行数据封装、传输,可在传统的基于buffer缓冲设计的核间通信机制的基础上进一步提高数据传输的稳定性,并可减少对io资源的消耗,从而将传统廉价的串口性能发挥到极致。与此同时,通过在第二处理器中设计二级缓存池,用于暂存残缺数据帧,并对残缺数据帧进行断帧拼接处理或漏帧续传处理或错帧重传处理,可实现在较高的传输速率(如采用921600bps的传输速率)下的大数据包的稳定传输,且传输过程中的丢包率较低,可实现双处理器之间的长时间可靠连接,进一步提高了第一处理器与第二处理器之间的数据传输的稳定性,并且可大大降低通信成本。
[0070]
在一些实施例中,根据残缺数据帧进行断帧拼接处理或漏帧续传处理或错帧重传处理,具体包括:
[0071]
获取残缺数据帧的残帧消息流水号、定帧头后数据长度、原始数据长度;
[0072]
获取残缺数据帧的前一数据帧的前帧消息流水号,以及后一数据帧的后帧消息流水号;
[0073]
根据残帧消息流水号、前帧消息流水号和后帧消息流水号,判断残帧消息流水号是否为连续流水号;
[0074]
若残帧消息流水号为连续流水号,且残缺数据帧无乱码数据,且根据定帧头后数据长度、原始数据长度确定残缺数据帧仅缺失部分原始数据,则确定残缺数据帧为断帧,根据残缺数据帧进行断帧拼接处理;
[0075]
若残帧消息流水号为不连续流水号,且残缺数据帧无乱码数据,且且根据定帧头后数据长度、原始数据长度确定残缺数据帧仅缺失部分原始数据,则确定残缺数据帧为漏帧,根据残缺数据帧进行漏帧续传处理;
[0076]
若残帧消息流水号为不连续流水号,且根据定帧头后数据长度、原始数据长度确定残缺数据帧的消息头已损坏丢失,则确定残缺数据帧为错帧,根据残缺数据帧进行错帧重传处理。
[0077]
残帧消息流水号,指示残缺数据帧属于第一处理器201发送的第几条信息。
[0078]
前帧消息流水号,指示在残缺数据帧的前一数据帧属于第一处理器201发送的第几条信息。
[0079]
后帧消息流水号,指示在残缺数据帧的后一数据帧属于第一处理器201发送的第几条信息。
[0080]
作为一示例,假设待传输数据为“h12345r h12345r h12345r h12345rh12345r”,其中,一个完整数据帧包含payload数据“h12345r”,那么该待传输数据可分为5个完整数据帧,其消息流水号分别为1、2、3、4、5。若第一处理器201将待传输数据拆分成了分片数据01“h12345r h12345r h123”、分片数据02“45r h12345r h12345r”两个分片数据,并将这两个分片数据分别按照上述封包协议封装成两个封装数据后传输给第二处理器202。
[0081]
下面以第二处理器202接收到封装数据“h12345r h12345r h123”为例进行详细说明。封装数据“h12345r h12345r h123”中包含有两个“h12345r”的完整数据帧和一个“h123”的残缺数据帧。
[0082]
若残缺数据帧“h123”的残帧消息流水号为3,其前一数据帧“h12345r”的前帧消息流水号为2,后一数据帧为空,即收到的封装数据的数据帧为连续流水号,且根据残缺数据帧“h123”的定帧头后数据长度、原始数据长度确定残缺数据帧仅缺失部分原始数据,则可判定残缺数据帧“h123”为断帧。
[0083]
若残缺数据帧“h123”的残帧消息流水号为3,其前一数据帧“h12345r”的前帧消息流水号为1,后一数据帧为空,即收到的封装数据的数据帧为不连续流水号,且根据残缺数据帧“h123”的定帧头后数据长度、原始数据长度确定残缺数据帧仅缺失部分原始数据,则可判定分片数据01漏帧,且残缺数据帧“h123”为断帧。
[0084]
若残缺数据帧“h123”的残帧消息流水号为3其前一数据帧“h12345r”的前帧消息流水号为1,后一数据帧为空,即收到的封装数据的数据帧为不连续流水号,且根据定帧头后数据长度、原始数据长度确定残缺数据帧的消息头已损坏丢失,则可判定残缺数据帧“h123”为错帧。
[0085]
在一些实施例中,对残缺数据帧进行断帧拼接处理,以获得完整数据帧,具体包括:
[0086]
确定残缺数据帧的数据类型和帧尾数据;
[0087]
在二级缓存池中,查找出与数据类型相同且与帧尾数据匹配的待拼接数据帧;
[0088]
将残缺数据帧和待拼接数据帧进行拼接,得到一个完整数据帧。
[0089]
数据类型,表示残缺数据帧属于哪一类车载功能数据或者控制数据。例如,车门控制数据、车窗控制数据、车载空调控制数据、车载娱乐功能数据等。
[0090]
帧尾数据,主要是用于指示断帧的位置。
[0091]
作为一示例,若经上述步骤判定残缺数据帧“h123”为断帧,则进一步确定该残缺数据帧“h123”是属于哪一类车载功能数据或者控制数据,并确定其帧尾数据。例如,残缺数据帧“h123”属于车窗控制数据,其帧尾数据为第三条消息中的第四个数据位“3”。接下来,第二处理器202可在二级缓存池中,从属于车窗控制数据的残缺数据帧中查找是否有与“第三条消息中的第四个数据位“3
””
匹配的待拼接数据帧,即是否存在第四条消息且第一个数据位为“4”的数据帧。若二级缓存池中存在残缺数据帧“45r”,该数据帧为第四条消息且其
第一个数据位为“4”,则可将残缺数据帧“45r”确定为待拼接数据帧。接着,将残缺数据帧“h123”与残缺数据帧“45r”进行拼接,得到一个完整数据帧“h12345r”,并将该完整数据帧“h12345r”推出二级缓存池,以进一步对该完整数据帧“h12345r”进行解包处理,得到解封数据。
[0092]
本技术实施例提供的技术方案,第二处理器在接收到第一处理器发送过来的封装数据,并判定该封装数据包含残缺数据帧,且该残缺数据帧为断帧,则会将该残缺数据帧推入二级缓存池中,然后,按照先进先出的原则,对二级缓存池中的残缺数据帧进行断帧拼接处理,并在拼接成功后,将拼接得到的完整数据帧推出二级缓存池,使得完整数据帧进入主线程,以进行解包处理,得到解封数据。
[0093]
在一些实施例中,根据残缺数据帧进行漏帧续传处理,以获得完整数据帧,具体包括:
[0094]
向第一处理器返回残帧续传指令,残帧续传指令包括漏帧位置,以使第一处理器基于漏帧位置确定续传数据,并返回续传数据;
[0095]
在接收到续传数据时,将残缺数据帧和续传数据组装成一个完整数据帧。
[0096]
作为一示例,若第二处理器202经上述步骤确定残帧消息流水号为不连续流水号,则可判定分片数据01漏帧(即缺少某些数据帧),之后,可向第一处理器201返回残帧续传指令,该残帧续传指令包括漏帧位置,即未接收到的数据帧的消息流水号。例如,残缺数据帧“h123”的残帧消息流水号为3,其前一数据帧的前帧消息流水号为1,由此可确定接收到的分片数据01缺少第二条消息,即目前未接收到消息流水号为2的数据帧。此时,第二处理器202可向第一处理器201返回含有“缺少第二条消息”的残帧续传指令。第一处理器201在接收到该残帧续传指令后,从数据备份池中查找出消息流水号为2的数据帧,并将该数据帧组装成续传数据返回至第二处理器202。之后,若确定该续传数据是否为一个完整数据帧,则对该完整数据帧进行解包处理,得到解封数据。
[0097]
作为另一示例,若第二处理器202经上述步骤确定残缺数据帧“h123”的残帧消息流水号为连续流水号,且根据定帧头后数据长度、原始数据长度确定残缺数据帧仅缺失部分原始数据,则判定该残缺数据帧“h123”为漏帧。第二处理器202向第一处理器201返回残帧续传指令,该残帧续传指令包括残缺数据帧“h123”的漏帧位置,即数据丢失起始位置,在该示例中,残缺数据帧“h123”的数据丢失起始位置为第四数据位“3”。第一处理器201在接收到该残帧续传指令后,从数据备份池中查找出消息流水号为2的数据帧,并截取从第四数据位“3”的下一个数据位至最后一个数据位的数据作为续传数据,即“45r”,并将该续传数据进行封装后传输至第二处理器202。第二处理器202在接收到续传数据“45r”后,将残缺数据帧“h123”与续传数据“45r”进行拼接,得到一个完整数据帧“h12345r”,并将该完整数据帧“h12345r”推出二级缓存池中。
[0098]
本技术实施例提供的技术方案,第二处理器在确定残缺数据帧为漏帧,或当前接收到的封装数据漏帧时,向第一处理器返回残帧续传指令,使得第一处理器只需重新向第二处理器重传该封装数据丢失的部分数据帧,或者该残缺数据帧丢失的部分原始数据,而不需要重传该封装数据或残缺数据帧的所有数据,可避免又一次重传所有数据而带来的性能损耗。
[0099]
漏帧补发只需要补发第二处理器未收到的消息/数据,对于当前已收到的消息仍
会被保存。例如,一个完整数据帧应有500字节数据,但是第二处理器接收到的数据帧的最后十个数据丢失了。传统模式下需要重新发送完整的500个字节数据,而本技术实施例提出的漏帧补发技术手段则可仅需发送第二处理器没有接收到的10个字节数据即可。由此可见,本技术实施例提出的漏帧补发技术手段相较于传统模式,数据传输速率性能可提升将近10倍,这一改进对于tbox来说极为重要。
[0100]
在一些实施例中,根据残缺数据帧进行错帧重传处理,以获得完整数据帧,具体包括:
[0101]
向第一处理器返回完全重传指令,以使第一处理器重新传输与残缺数据帧对应的完整数据帧,并清除残缺数据帧,完全重传指令包括残缺数据帧的残帧消息流水号。
[0102]
作为一示例,若第二处理器202经上述步骤确定残缺数据帧“h123”的残帧消息流水号为不连续流水号,且该残缺数据帧“h123”的消息头已损坏丢失(如表2中的第0-15个字节中的任一个或多个所对应的内容损坏(如乱码)或丢失),则该残缺数据帧“h123”为错帧。此时,第二处理器202可向第一处理器201返回完全重传指令,该完全重传指令包括残缺数据帧的残帧消息流水号“3”;同时从二级缓存池中清除该残缺数据帧“h123”。第一处理器201在接收到该完全重传指令时,从数据备份池中查找到消息流水号为“3”的完整数据帧,并将该完整数据帧重新封装后传输给第二处理器202。
[0103]
与此同时,由于残缺数据帧“h123”的残帧消息流水号为不连续流水号,所以此处第二处理器202还需要向第一处理器201返回残帧续传指令,以使第一处理器将消息流水号为“2”的数据帧重新传输过来。
[0104]
可以理解的,若是残帧消息流水号为连续流水号,且该残缺数据帧的消息头已损坏丢失,则可只向第一处理器201返回完全重传指令,以使第一处理器201重新传输与该残缺数据帧对应的完整数据帧。
[0105]
针对车窗升降、尾门升降角度调节、空调调节等耗时较长的业务来说,及时的发现网络故障是提升用户感知的重要手段。本技术实施例提供的技术方案,若是根据定帧头后数据长度、原始数据长度确定残缺数据帧的消息头已损坏丢失,说明当前数据链路可能受到了外部干扰导致数据被破坏,此时,第二处理器可以将包含残缺数据帧的消息id、消息流水号等属性参数的完全重传指令返回给第一处理器,以使得第一处理器可及时重发当前消息,而不需要等待到确定第二处理器返回ack响应超时再重新发送,由此可明显提升在恶劣网络环境下的数据/消息传输响应效率。
[0106]
在一些实施例中,在上述步骤s302,包括:
[0107]
若封装数据包括至少一个完整数据帧和至少一个残缺数据帧,则对封装数据进行分类,得到完整数据帧集合和残缺数据帧集合;
[0108]
将完整数据帧集合推入第一线程进行解包处理,得到解封数据;
[0109]
将残缺数据帧集合经由第二线程推入存储池中,再将残缺数据帧集合从存储池推入到二级缓存池中。
[0110]
作为一示例,以第二处理器202接收到封装数据“h12345r h12345r h123”为例进行详细说明。封装数据“h12345r h12345r h123”中包含有两个“h12345r”的完整数据帧和一个“h123”的残缺数据帧。对封装数据“h12345rh12345r h123”进行分类,得到完整数据帧集合和残缺数据帧集合。其中,该完整数据帧集合包括“h12345r”、“h12345r”两个完整数据
帧,残缺数据帧集合包括“h123”一个残缺数据帧。
[0111]
将“h12345r”、“h12345r”两个完整数据帧推入第一线程进行解包处理,得到解封数据。将残缺数据帧“h123”推入第二线程,再经由第二线程推入存储池中,再从存储池中按照先进先出的原则,将残缺数据帧推入二级缓存池中,接着,按照上述步骤,根据该残缺数据帧进行处理,进行断帧拼接处理或漏帧续传处理或错帧重传处理,以获得完整数据帧,并将完整数据帧推出二级缓存池。
[0112]
图4示出了本技术实施例提供的一种数据/消息接收方法的流程示意图。该数据/消息接收方法可由图1的第二处理器202执行。该数据/消息接收方法包括:
[0113]
步骤s401,接收第一处理器201传输过来的封装数据;
[0114]
步骤s402,根据封包协议判断该封装数据是否足以组成≥1个完整数据帧;
[0115]
步骤s403,若该封装数据足以组成≥1个完整数据帧,则对该封装数据进行分类,得到完整数据帧集合和残缺数据帧集合;
[0116]
步骤s404,将完整数据帧集合推入第一线程进行解包处理,得到解封数据;
[0117]
步骤s405,将残缺数据帧集合经由第二线程推入存储池中,再将残缺数据帧集合从存储池推入到二级缓存池中;
[0118]
步骤s406,根据该残缺数据帧集合中的残缺数据帧的残缺消息流水号、定帧头后数据长度、原始数据长度,及其前一数据帧的前帧消息流水号,以及后一数据帧的后帧消息流水号,判断该残缺数据帧集合中的残缺数据帧的属性;
[0119]
步骤s407,若确定该残缺数据帧为断帧,则对残缺数据帧进行断帧拼接处理,并将拼接成功的完整数据帧推出二级缓存池中;
[0120]
步骤s408,若确定封装数据漏帧,或者残缺数据帧为漏帧,则根据残缺数据帧进行漏帧续传处理;
[0121]
步骤s409,若确定残缺数据帧为错帧,则根据残缺数据帧进行错帧重传处理,并从二级缓存池中清理该残缺数据帧。
[0122]
在一些实施例中,第一处理器201,可根据当前网络状况和待传输数据/消息的大小,按照如图5所示的数据/消息传输流程来向第二处理器202传输数据。
[0123]
在一实施方式中,若当前网络状况良好,且待传输数据的数据大小适宜,数据可一次性完整地被接收端成功接收,那么可以采用第一处理器201和第二处理器202预先协商好的封包协议(如上表2所示),对待传输数据进行封装,得到封装数据,然后将该封装数据一次性发送给第二处理器202。第一处理器201在向第二处理器202发送封装数据时,会同步将封装数据备份存储在数据备份池中。第一处理器201在接收到第二处理器202返回的ack响应后,判断该ack响应的类型,若该ack响应的类型为接收成功ack,则将数据备份池中的封装数据进行清理。
[0124]
在另一实施方式中,若当前网络状况良好,但待传输数据的数据过大,需要分片发送,那么可以先对待传输数据进行拆分,得到多个分片数据,再采用上述封包协议对每个分片数据进行封装,得到多个封装数据(分片包)。在每向第二处理器202发送一个分片包后,备份该分片包到数据备份池中,不需等待第二处理器202返回该分片包的ack响应,即可继续发送下一个分片包,并同步备份该分片包到数据备份池中,从而达到并行发送的效果,提高数据传输的效率。
[0125]
在又一实施方式中,若当前网络不稳定,分片包发送过程中网络时好时差,导致某分片包的部分数据在传输过程丢失了(如丢失了部分payload数据)。此时,第二处理器202在接收到该分片包后,若确定该分片包是漏帧,则向第一处理器201反馈当前帧尾数据和残帧续传指令。第二处理器202在接收到第一处理器201的反馈后,在数据备份池中找到该分片包的备份数据,并定位至漏帧的开始数据位置,截取出从该开始数据位置到该数据帧的最后一个数据位置的数据,并将该部分数据确定为续传数据,并传输至第二处理器202。
[0126]
通过上述方式,第一处理器201只需重新向第二处理器202重传该分片包丢失的部分数据,而不需要重传该分片包的所有数据,可避免又一次重传该分片包的所有数据而带来的性能损耗。
[0127]
在再一实施方式中,若当前网络恶劣,如因受到电磁干扰、链路干扰或者网络异常等原因而导致第一处理器201发送出去的封装数据完全无法被第二处理器202接收并解析,则第二处理器202在确定该封装数据为错帧时,可向第一处理器201反馈完全重传指令,该完全重传指令包括该封装数据的消息id、消息流水号等属性参数。第一处理器201在接收到该完全重传指令后,如果网络恢复正常,可从数据备份池中查找到该封装数据的备份数据,并立即将该备份数据发送给第二处理器202,而无需等到判断第二处理器202返回的ack响应超时后再执行完全重传。由此可明显提升恶劣网络环境下消息传输的响应效率。如果网络一直处于恶劣状况,则等到判断第二处理器202返回的ack响应超时后再执行完全重传。
[0128]
综上所述,本技术实施例提供的技术方案,通过在第一处理器和第二处理器之间采用特定的封包协议,并结合消息队列、数据分片技术等一系列保障传输稳定的机制,可以将传统廉价的串口性能发挥到极致,并且通过在第二处理器中引入二级缓存池来处理残缺数据帧,升级了通用的断帧拼接、漏帧补发、错帧重传三种技术手段,很好地改善了数据/消息传输不稳定,速率过大时容易丢包等传统痛点,十分贴合tbox需要降低成本的需求(和传统可靠的以太网相比价格大约缩减了10倍),并且可降低io资源的消耗(缩减大约5倍,pcb布板面积大大降低)、高可靠性(和通俗做法相比能在921600bps速率下稳定运转一周并且低等级的故障率能够控制在接受范围内)、提升用户感受(如在发生故障时能主动请求重传,最大限度地避免发送出去的消息一直“转圈圈”的烦恼)等特点。
[0129]
上述所有可选技术方案,可以采用任意结合形成本技术的可选实施例,在此不再一一赘述。
[0130]
下述为本技术装置实施例,可以用于执行本技术方法实施例。对于本技术装置实施例中未披露的细节,请参照本技术方法实施例。
[0131]
图6是本技术实施例提供的一种双处理器核间通信装置的结构示意图。如图5所示,该双处理器核间通信装置包括:
[0132]
接收模块601,被配置为接收第一处理器传输过来的封装数据,封装数据是基于第一处理器与第二处理器预先协商好的封包协议进行封装得到的;封包协议包括帧定界域、定帧头后数据长度、消息属性、消息id、消息流水号、原始数据长度、原始数据以及校验码;消息属性包括分片数、分片序号、确认信号;
[0133]
推入模块602,被配置为若封装数据包括残缺数据帧,则将残缺数据帧推入二级缓存池中;
[0134]
处理模块603,被配置为根据残缺数据帧进行断帧拼接处理或漏帧续传处理或错
帧重传处理,以获得完整数据帧,并将完整数据帧推出二级缓存池;
[0135]
解包模块604,被配置为对完整数据帧进行解包处理,得到解封数据。
[0136]
本技术实施例提供的技术方案,通过在第一处理器与第二处理器之间增加采用预先协商好的封包协议进行数据封装、传输,可在传统的基于buffer缓冲设计的核间通信机制的基础上进一步提高数据传输的稳定性,并可减少对io资源的消耗,从而将传统廉价的串口性能发挥到极致。与此同时,通过在第二处理器中设计二级缓存池,用于暂存残缺数据帧,并对残缺数据帧进行断帧拼接处理或漏帧续传处理或错帧重传处理,可实现在较高的传输速率(如采用921600bps的传输速率)下的大数据包的稳定传输,且传输过程中的丢包率较低,可实现双处理器之间的长时间可靠连接,进一步提高了第一处理器与第二处理器之间的数据传输的稳定性,并且可大大降低通信成本。
[0137]
在一些实施例中,上述处理模块603,包括:
[0138]
第一获取单元,被配置为获取残缺数据帧的残帧消息流水号、定帧头后数据长度、原始数据长度;
[0139]
第二获取单元,被配置为获取残缺数据帧的前一数据帧的前帧消息流水号,以及后一数据帧的后帧消息流水号;
[0140]
判断单元,被配置为根据残帧消息流水号、前帧消息流水号和后帧消息流水号,判断残帧消息流水号是否为连续流水号;
[0141]
第一处理单元,被配置为若残帧消息流水号为连续流水号,且根据定帧头后数据长度、原始数据长度确定残缺数据帧仅缺失部分原始数据,则确定残缺数据帧为断帧,对残缺数据帧进行断帧拼接处理;
[0142]
第二处理单元,被配置为若残帧消息流水号为不连续流水号,则确定封装数据漏帧,或者,若残帧消息流水号为连续流水号,且根据定帧头后数据长度、原始数据长度确定残缺数据帧仅缺失部分原始数据,则确定残缺数据帧为漏帧;根据残缺数据帧进行漏帧续传处理;
[0143]
第三处理单元,被配置为若残帧消息流水号为不连续流水号,且根据定帧头后数据长度、原始数据长度确定残缺数据帧的消息头已损坏丢失,则确定残缺数据帧为错帧,根据残缺数据帧进行错帧重传处理。
[0144]
在一些实施例中,上述处理模块603,包括:
[0145]
确定单元,被配置为确定残缺数据帧的数据类型和帧尾数据;
[0146]
查找单元,被配置为在二级缓存池中,查找出与数据类型相同且与帧尾数据匹配的待拼接数据帧;
[0147]
拼接单元,被配置为将残缺数据帧和待拼接数据帧进行拼接,得到一个完整数据帧。
[0148]
本技术实施例提供的技术方案,第二处理器在接收到第一处理器发送过来的封装数据,并判定该封装数据包含残缺数据帧,且该残缺数据帧为断帧,则会将该残缺数据帧推入二级缓存池中,然后,按照先进先出的原则,对二级缓存池中的残缺数据帧进行断帧拼接处理,并在拼接成功后,将拼接得到的完整数据帧推出二级缓存池,使得完整数据帧进入主线程,以进行解包处理,得到解封数据。
[0149]
在一些实施例中,上述处理模块603,包括:
[0150]
第一响应单元,被配置为向第一处理器返回残帧续传指令,残帧续传指令包括漏帧位置,以使第一处理器基于漏帧位置确定续传数据,并返回续传数据;
[0151]
组装单元,被配置为在接收到续传数据时,将残缺数据帧和续传数据组装成一个完整数据帧。
[0152]
本技术实施例提供的技术方案,第二处理器在确定残缺数据帧为漏帧,或当前接收到的封装数据漏帧时,通过第一响应单元向第一处理器返回残帧续传指令,使得第一处理器只需重新向第二处理器重传该封装数据丢失的部分数据帧,或者该残缺数据帧丢失的部分原始数据,而不需要重传该封装数据或残缺数据帧的所有数据,可避免又一次重传所有数据而带来的性能损耗。
[0153]
在一些实施例中,上述处理模块603,包括:
[0154]
第二响应单元,被配置为向第一处理器返回完全重传指令,以使第一处理器重新传输与残缺数据帧对应的完整数据帧,并清除残缺数据帧,完全重传指令包括残缺数据帧的残帧消息流水号。
[0155]
本技术实施例提供的技术方案,若是根据定帧头后数据长度、原始数据长度确定残缺数据帧的消息头已损坏丢失,说明当前数据链路可能受到了外部干扰导致数据被破坏,此时,第二处理器可以将包含残缺数据帧的消息id、消息流水号等属性参数的完全重传指令返回给第一处理器,以使得第一处理器立即重发当前消息,而不需要等待到确定第二处理器返回ack响应超时再重新发送,由此可明显提升在恶劣网络环境下的数据/消息传输响应效率。
[0156]
在一些实施例中,推入模块602,包括:
[0157]
分类单元,被配置为若封装数据包括至少一个完整数据帧和至少一个残缺数据帧,则对封装数据进行分类,得到完整数据帧集合和残缺数据帧集合;
[0158]
解包单元,被配置为将完整数据帧集合推入第一线程进行解包处理,得到解封数据;
[0159]
推入单元,被配置为将残缺数据帧集合经由第二线程推入存储池中,再将残缺数据帧集合从存储池推入到二级缓存池中。
[0160]
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。
[0161]
图7是本技术实施例提供的一种tbox的结构示意图。如图7所示,该tbox包括:第一处理器201和第二处理器202;所述第一处理器201和第二处理器202基于串口进行核间通信;所述第二处理器202包括如图6所示的的双处理器核间通信装置。
[0162]
本技术实施例提供的技术方案,通过在第一处理器与第二处理器之间增加采用预先协商好的封包协议进行数据封装、传输,可在传统的基于buffer缓冲设计的核间通信机制的基础上进一步提高数据传输的稳定性,并可减少对io资源的消耗,从而将传统廉价的串口性能发挥到极致。与此同时,通过在第二处理器中设计二级缓存池,用于暂存残缺数据帧,并根据残缺数据帧进行断帧拼接处理或漏帧续传处理或错帧重传处理,可实现在较高的传输速率(如采用921600bps的传输速率)下的大数据包的稳定传输,且传输过程中的丢包率较低,可实现双处理器之间的长时间可靠连接,进一步提高了第一处理器与第二处理
器之间的数据传输的稳定性,并且可大大降低通信成本。
[0163]
图8是本技术实施例提供的电子设备8的示意图。如图8所示,该实施例的电子设备8包括:处理器801、存储器802以及存储在该存储器802中并且可在处理器801上运行的计算机程序803。处理器801执行计算机程序803时实现上述各个方法实施例中的步骤。或者,处理器801执行计算机程序803时实现上述各装置实施例中各模块/单元的功能。
[0164]
电子设备8可以是桌上型计算机、笔记本、掌上电脑及云端服务器等电子设备。电子设备8可以包括但不仅限于处理器801和存储器802。本领域技术人员可以理解,图8仅仅是电子设备8的示例,并不构成对电子设备8的限定,可以包括比图示更多或更少的部件,或者不同的部件。
[0165]
处理器801可以是中央处理单元(central processing unit,处理器),也可以是其它通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。
[0166]
存储器802可以是电子设备8的内部存储单元,例如,电子设备8的硬盘或内存。存储器802也可以是电子设备8的外部存储设备,例如,电子设备8上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。存储器802还可以既包括电子设备8的内部存储单元也包括外部存储设备。存储器802用于存储计算机程序以及电子设备所需的其它程序和数据。
[0167]
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0168]
集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本技术实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,计算机程序可以存储在计算机可读存储介质中,该计算机程序在被处理器执行时,可以实现上述各个方法实施例的步骤。计算机程序可以包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如,在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0169]
以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者
替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围,均应包含在本技术的保护范围之内。

技术特征:
1.一种双处理器核间通信方法,其特征在于,包括:接收第一处理器传输过来的封装数据,所述封装数据是基于第一处理器与第二处理器预先协商好的封包协议进行封装得到的;若所述封装数据包括残缺数据帧,则将所述残缺数据帧推入二级缓存池中;根据所述残缺数据帧进行断帧拼接处理或漏帧续传处理或错帧重传处理,以获得完整数据帧,并将所述完整数据帧推出所述二级缓存池;对所述完整数据帧进行解包处理,得到解封数据。2.根据权利要求1所述的方法,其特征在于,根据所述残缺数据帧进行断帧拼接处理或漏帧续传处理或错帧重传处理,包括:获取所述残缺数据帧的残帧消息流水号、定帧头后数据长度、原始数据长度;获取所述残缺数据帧的前一数据帧的前帧消息流水号,以及后一数据帧的后帧消息流水号;根据所述残帧消息流水号、前帧消息流水号和后帧消息流水号,判断所述残帧消息流水号是否为连续流水号;若所述残帧消息流水号为连续流水号,且根据所述定帧头后数据长度、原始数据长度确定所述残缺数据帧仅缺失部分原始数据,则确定所述残缺数据帧为断帧,根据所述残缺数据帧进行断帧拼接处理;若所述残帧消息流水号为不连续流水号,则确定所述封装数据漏帧,或者,若所述残帧消息流水号为连续流水号,且根据所述定帧头后数据长度、原始数据长度确定所述残缺数据帧仅缺失部分原始数据,则确定所述残缺数据帧为漏帧;根据所述残缺数据帧进行漏帧续传处理;若所述残帧消息流水号为不连续流水号,且根据所述定帧头后数据长度、原始数据长度确定所述残缺数据帧的消息头已损坏丢失,则确定所述残缺数据帧为错帧,根据所述残缺数据帧进行错帧重传处理。3.根据权利要求1或2所述的方法,其特征在于,根据所述残缺数据帧进行断帧拼接处理,以获得完整数据帧,包括:确定所述残缺数据帧的数据类型和帧尾数据;在所述二级缓存池中,查找出与所述数据类型相同且与所述帧尾数据匹配的待拼接数据帧;将所述残缺数据帧和所述待拼接数据帧进行拼接,得到一个完整数据帧。4.根据权利要求1或2所述的方法,其特征在于,根据所述残缺数据帧进行漏帧续传处理,以获得完整数据帧,包括:向第一处理器返回残帧续传指令,所述残帧续传指令包括漏帧位置,以使所述第一处理器基于所述漏帧位置确定续传数据,并返回所述续传数据;在接收到所述续传数据时,将所述残缺数据帧和续传数据组装成一个完整数据帧。5.根据权利要求1或2所述的方法,其特征在于,根据所述残缺数据帧进行错帧重传处理,以获得完整数据帧,包括:向第一处理器返回完全重传指令,以使所述第一处理器重新传输与所述残缺数据帧对应的完整数据帧,并清除所述残缺数据帧,所述完全重传指令包括所述残缺数据帧的残帧
消息流水号。6.根据权利要求1所述的方法,其特征在于,若所述封装数据包括残缺数据帧,则将所述残缺数据帧推入二级缓存池中,包括:若所述封装数据包括至少一个完整数据帧和至少一个残缺数据帧,则对所述封装数据进行分类,得到完整数据帧集合和残缺数据帧集合;将所述完整数据帧集合推入第一线程进行解包处理,得到解封数据;将所述残缺数据帧集合经由第二线程推入存储池中,再将所述残缺数据帧集合从存储池推入到二级缓存池中。7.根据权利要求1所述的方法,其特征在于,所述封包协议包括帧定界域、定帧头后数据长度、消息属性、消息id、消息流水号、原始数据长度、原始数据以及校验码;所述消息属性包括分片数、分片序号、确认信号。8.一种双处理器核间通信装置,其特征在于,包括:接收模块,被配置为接收第一处理器传输过来的封装数据,所述封装数据是基于第一处理器与第二处理器预先协商好的封包协议进行封装得到的;推入模块,被配置为若所述封装数据包括残缺数据帧,则将所述残缺数据帧推入二级缓存池中;处理模块,被配置为根据所述残缺数据帧进行断帧拼接处理或漏帧续传处理或错帧重传处理,以获得完整数据帧,并将所述完整数据帧推出所述二级缓存池;解包模块,被配置为对所述完整数据帧进行解包处理,得到解封数据。9.一种tbox,其特征在于,包括第一处理器和第二处理器;所述第一处理器和第二处理器基于串口进行核间通信;所述第二处理器包括如权利要求8所述的双处理器核间通信装置。10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述方法的步骤。

技术总结
本申请涉及基础通信设备领域,提供了一种双处理器核间通信方法、装置、TBOX及存储介质。该方法包括:接收第一处理器传输过来的封装数据,封装数据是基于第一处理器与第二处理器预先协商好的封包协议进行封装得到的;若封装数据包括残缺数据帧,则将残缺数据帧推入二级缓存池中;根据残缺数据帧进行断帧拼接处理或漏帧续传处理或错帧重传处理,以获得完整数据帧,并将完整数据帧推出二级缓存池;对完整数据帧进行解包处理,得到解封数据。本申请可实现TBOX的双处理器之间的数据/消息的稳定传输,降低了IO资源的消耗,并可极大地降低通信成本。成本。成本。


技术研发人员:朱杰平 范海 杨振华 汪星星
受保护的技术使用者:成都赛力斯科技有限公司
技术研发日:2023.05.12
技术公布日:2023/8/9
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐