CN105450488B - 一种数据处理方法及相关装置 - Google Patents
一种数据处理方法及相关装置 Download PDFInfo
- Publication number
- CN105450488B CN105450488B CN201510765606.9A CN201510765606A CN105450488B CN 105450488 B CN105450488 B CN 105450488B CN 201510765606 A CN201510765606 A CN 201510765606A CN 105450488 B CN105450488 B CN 105450488B
- Authority
- CN
- China
- Prior art keywords
- data
- variable
- structural body
- body variable
- byte
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/40—Bus networks
- H04L12/40006—Architecture of a communication node
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明实施例公开了一种数据处理方法及相关装置,包括:接收数据发送节点发送的包括至少一个数据成员的数据;生成用于存储所述数据成员的成员变量,并确定所述成员变量占用的存储空间为所述数据成员占用的存储空间;生成包括所述成员变量的结构体变量,并在所述成员变量所占用的内存空间中存储所述数据成员;向数据接收节点发送所述结构体变量,所述结构体变量用于指示数据接收节点在接收所述结构体变量之后,提取所述结构体变量中的所述数据成员。本发明实施例提供的技术方案有利于提高数据处理效率、同时更好地利用数据空间。
Description
技术领域
本发明涉及CAN通信领域,具体涉及一种数据处理方法及相关装置。
背景技术
现在汽车通信方式多采用控制器局域网络(Controller Area Network,CAN)传输。由于CAN的传输带宽有限,需要利用有限的数据包传输更多的数据信息。目前常用的方法是对数据进行拆包和组包,例如一个数据只需要6bit数据空间,数据一般是以一个字节为传输单位,会浪费2bit位,如果需要利用这2bit位,数据发送节点需要把一个字节进行拆包,把待发送的原始CAN数据也进行拆包,然后塞到相对应的位中,中间需要对数据位进行左移或者右移,发送节点将拆包处理后的拆包数据发送至数据接收节点,接收节点接收拆包数据,并基于获取的拆包策略和数据位移位信息,针对接收到的数据包进行组包操作,以还原出原始CAN数据。
现有技术针对CAN数据的拆包和组包方法的需要数据位左移或者右移,处理过程复杂,对处理器处理能力要求较高。
发明内容
本发明实施例提供了一种数据处理方法及相关装置,以期解决现有技术中CAN数据处理效率低,数据空间无法充分利用的问题。
本发明实施例第一方面提供一种数据处理方法,包括:。
接收数据发送节点发送的包括至少一个数据成员的数据;
生成用于存储所述数据成员的成员变量,并确定所述成员变量占用的存储空间为所述数据成员占用的存储空间;
生成包括所述成员变量的结构体变量,并在所述成员变量所占用的内存空间中存储所述数据成员;
向数据接收节点发送所述结构体变量,所述结构体变量用于指示数据接收节点在接收所述结构体变量之后,提取所述结构体变量中的所述数据成员。
进一步可选地,在所述成员变量所占用的内存空间中存储所述数据成员包括:
确定所述数据成员的存储格式;
在所述成员变量所占用的内存空间中按照所述存储格式存储所述数据成员。
进一步可选地,所述生成包括所述成员变量的结构体变量之前,还包括:
确定包括所述成员变量的结构体变量的指定对齐值。
进一步可选地,所述接受的数据携带所述数据发送节点标识;
所述接收数据发送节点发送的包括至少一个数据成员的数据之前,所述方法还包括:
预定义待接收的数据来源标识;
所述接收数据发送节点发送的包括至少一个数据成员的数据之后,所述方法还包括:
若检测到所述数据发送节点标识与所述预定义的待接收的数据来源标识匹配,触发执行所述生成用于存储所述数据成员的成员变量的步骤。
进一步可选地,所述数据成员占用的存储空间不大于所述生成的用于存储所述数据成员的成员变量的占用的标准存储空间。
进一步可选地,在所述成员变量所占用的内存空间中存储所述数据成员之后,所述向数据接收节点发送所述结构体变量之前,所述方法还包括:
替换所述结构体变量中存储的所述数据成员为目标数据成员。
本发明实施例第二方面提供一种数据处理装置,包括:
接收模块,用于接收数据发送节点发送的包括至少一个数据成员的数据;
第一处理模块,用于生成用于存储所述数据成员的成员变量,并确定所述成员变量占用的存储空间为所述数据成员占用的存储空间;
第二处理模块,用于生成包括所述成员变量的结构体变量,并在所述成员变量所占用的内存空间中存储所述数据成员;
发送模块,用于向数据接收节点发送所述结构体变量,所述结构体变量用于指示数据接收节点在接收所述结构体变量之后,提取所述结构体变量中的所述数据成员。
进一步可选地,所述第二处理模块,具体用于确定所述数据成员的存储格式;在所述成员变量所占用的内存空间中按照所述存储格式存储所述数据成员。
进一步可选地,所述第二处理模块,还用于确定包括所述成员变量的结构体变量的指定对齐值。
进一步可选地,所述接收的数据携带所述数据发送节点标识;
所述装置还包括预定义模块,用于接收模块接收数据发送节点发送的包括至少一个数据成员的数据之前,预定义待接收的数据来源标识;
所述装置还包括检测模块,用于接收模块接收数据发送节点发送的包括至少一个数据成员的数据之后,若检测到所述数据发送节点标识与所述预定义的待接收的数据来源标识匹配,触发第一处理模块执行所述生成用于存储所述数据成员的成员变量的步骤。
进一步可选地,所述数据成员占用的存储空间不大于所述生成的用于存储所述数据成员的成员变量的占用的标准存储空间。
进一步可选地,所述装置还包括修改模块,用于第二处理模块在所述成员变量所占用的内存空间中存储所述数据成员之后,发送模块所述向数据接收节点发送所述结构体变量之前,替换所述结构体变量中存储的所述数据成员为目标数据成员。
可以看出,本发明实施例技术方案中,终端接收数据发送节点发送的包括至少一个数据成员的数据,根据数据成员的不同生成不同的用于存储所述数据成员的成员变量去分区,并以指定位大小的方式确定所述成员变量占用的存储空间为所述数据成员占用的存储空间,然后生成包括所述成员变量的结构体变量,并在所述成员变量所占用的内存空间中存储所述数据成员,最终向数据接收节点发送所述结构体变量,以使数据接收节点在接收所述结构体变量之后,直接提取所述结构体变量中的所述数据成员,在本实施例中任意一个数据节点接收和发送数据时,直接将数据拷贝到结构体变量中,无需进行拆包和组包,进而有利于提高数据处理效率、更好地利用数据空间。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明第一实施例提供的一种数据处理方法的流程示意图;
图2是本发明第二实施例提供的一种数据处理方法的流程示意图;
图3是本发明第三实施例提供的一种数据处理装置的流程示意图;
图4是本发明第四实施例提供的一种数据处理装置的流程示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
请参阅图1,图1是本发明第一实施例提供的一种数据处理方法的流程示意图,本发明实施例的所述方法可以应用在诸如智能手机、平板电脑、智能可穿戴设备、车载设备等带通信网络功能的终端中,具体可由这些通信终端的处理器来实现。如图1所示,包括以下步骤:
S101、终端接收数据发送节点发送的包括至少一个数据成员的数据。
可以理解地,当CAN总线上的一个节点(站)发送数据时,它以报文形式广播给网络中所有节点。对每个节点来说,无论数据是否是发给自己的,都对其进行接收。每组报文开头为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案,在同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文。当一个站要向其它站发送数据时,该站的CPU将要发送的数据和自己的标识符传送给本站的CAN芯片,并处于准备状态;当它收到总线分配时,转为发送报文状态。CAN芯片将数据根据协议组织成一定的报文格式发出,这时网上的其它站处于接收状态。每个处于接收状态的站对接收到的报文进行检测,判断这些报文是否是发给自己的,以确定是否接收它。
S102、终端生成用于存储所述数据成员的成员变量,并确定所述成员变量占用的存储空间为所述数据成员占用的存储空间。
可以理解地,根据所述数据成员的不同生成用于存储所述数据成员的不同的成员变量,由成员变量名即可知道每个数据成员的含义,解决了现有技术中,传统数组方式在没有保温对照的情况下不知道每个字节所代表的含义以及每位代表的含义。
其中,上述确定所述成员变量占用的存储空间为所述数据成员占用的存储空间的具体实现方式是通过指定位大小的方式实现的,即C语言中的位域。信息的存取一般以字节为单位,但实际上,有时存储一个信息不必用一个或多个字节,因此,可以通过将一个字节划分为不同的区域,并说明每个区域的位数实现在一个字节中放入多个数据,其中,每个区域有一个域名,允许在程序中按域名进行操作。位域的定义与结构体类似,形式为:
struct位域结构名{
位域列表}例如,
typedef struct{
uint8_t Bus_Flag:2;
uint8_t BMS_set_1:2;
uint8_t BMS_set_2:1;
uint8_t BMS_set_3:1;
uint8_t BMS_set_4:2;
uint8_t ALL_V:8;
uint8_t BMS_Nc3:8;
uint8_t BMS_Nc4:8;
uint8_t BMS_Nc5:8;
uint8_t BMS_Nc6:8;
uint8_t BMS_Nc7:8;
uint8_t DEV_ID:8;
}PGN256_Struct_BMS2PC
说明PGN256_Struct_BMS2PC共八个字节,其中,uint8_t Bus_Flag占两位,uint8_t BMS_set_1占2位,uint8_t BMS_set_2占1位,uint8_t BMS_set_3占1位,uint8_t BMS_set_4占2位,uint8_t ALL_V占8位,uint8_t BMS_Nc3占8位,uint8_t BMS_Nc4占8位,uint8_t BMS_Nc5占8位,uint8_t BMS_Nc6占8位,uint8_t BMS_Nc7占8位,uint8_t DEV_ID占8位。
S103、生成包括所述成员变量的结构体变量,并在所述成员变量所占用的内存空间中存储所述数据成员。
S104、向数据接收节点发送所述结构体变量,所述结构体变量用于指示数据接收节点在接收所述结构体变量之后,提取所述结构体变量中的所述数据成员。
作为一种可选的实施方式,在所述成员变量所占用的内存空间中存储所述数据成员包括:
确定所述数据成员的存储格式;
在所述成员变量所占用的内存空间中按照所述存储格式存储所述数据成员。
可以理解的,一般情况下,在定义CAN总线信号定义时,都会明确定义字节的发送顺序,即:以首先发送byte0(LSB),然后byte1,byte2,……byte7(MSB)的发送顺序;还是以首先发送byte7(MSB),然后byte6,byte5,……byte0(LSB)的发送顺序。目前,在实践和研究过程中发现,多个主机厂定义的CAN总线字节发送顺序均为前者,即首先发送LSB,最后发送MSB。
采用Intel格式编码的CAN总线信号为:当一个信号的数据长度不超过1个字节(8位)并且信号在一个字节内实现(即,该信号没有跨字节实现)时,该信号的高位将被放在该字节的高位,信号的低位将被放在该字节的低位,这样,信号的起始位就是该字节的低位;当一个信号的数据长度超过1个字节(8位)或者数据长度不超过一个字节但是采用跨字节方式实现时,该信号的高位将被放在高字节(MSB)的高位,信号的低位将被放在低字节(LSB)的低位,这样,信号的起始位就是低字节的低位。采用Motel格式编码的CAN总线信号为:当一个信号的数据长度不超过1个字节(8位)并且信号在一个字节内实现(即,该信号没有跨字节实现)时,信号的高位将被放在该字节的高位,信号的低位将被放在该字节的低位,这样,信号的起始位就是该字节的低位。当一个信号的数据长度超过1个字节(8位)或者数据长度不超过一个字节但是采用跨字节方式实现时,该信号的高位将被放在低字节(MSB)的高位,信号的低位将被放在高字节(LSB)的低位,这样,信号的起始位就是高字节的低位。
因为结构的存储格式可以设置,因此通过设置结构体的存储格式即可实现Intel传输格式与Motel传输格式的改变。
作为一种可选的实施方式,所述生成包括所述成员变量的结构体变量之前,还包括:
确定包括所述成员变量的结构体变量的指定对齐值。
可以理解地,结构体是一种复合数据类型,其构成元素既可以是基本数据类型(如整形int、长整形long、浮点float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然边界分配空间,各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同,为了使CPU能够对变量进行快速的访问,变量的起始地址应该具有某些特性,即所谓的“对齐”,比如4字节的int型,其起始地址应该位于4字节的边界上,即起始地址能够被4整除。字节对齐的作用不仅是便于CPU快速访问,同时也可以通过合理地利用字节对齐实现有效地节省存储空间。CAN数据传输采用短帧结构,每一帧的有效字节为8个,当给定的数据不超过8个字节时,可以使用CAN数据帧的全部的8个字节,当给定的数据超过8个字节时,可以通过多个CAN数据帧实现数据传输。
例如,C语言中#pragma pack(1)的含义是设置结构体的边界对齐为1个字节,也就是所有数据在内存中是连续存储的,编译器将结构体数据强制连续排列。作为一种可选的实施方式,所述接受的数据携带所述数据发送节点标识;
所述接收数据发送节点发送的包括至少一个数据成员的数据之前,所述方法还包括:
预定义待接收的数据来源标识;
所述接收数据发送节点发送的包括至少一个数据成员的数据之后,还包括:
若检测到所述数据发送节点标识与所述预定义的待接收的数据来源标识匹配,触发执行所述生成用于存储所述数据成员的成员变量的步骤。
作为一种可选的实施方式,所述数据成员占用的存储空间不大于所述生成的用于存储所述数据成员的成员变量的占用的标准存储空间。
作为一种可选的实施方式,在所述成员变量所占用的内存空间中存储所述数据成员之后,所述向数据接收节点发送所述结构体变量之前,还包括:
替换所述结构体变量中存储的所述数据成员为目标数据成员。
可以理解的,在本发明实施例中,当需要改变某一位或某几位的数据成员时,不需要像现有技术中把数据成员所在的字节全部读出,在将数据成员所在的位清零,而只需通过设置所述数据成员的值,然后再或上0X1,最终将CAN数据发送到相应节点,即可对数据进行修改,并将修改后的数据发送至数据接收节点。
可以看出,本发明实施例技术方案中,终端接收数据发送节点发送的包括至少一个数据成员的数据,根据数据成员的不同生成不同的用于存储所述数据成员的成员变量去分区,并以指定位大小的方式确定所述成员变量占用的存储空间为所述数据成员占用的存储空间,然后生成包括所述成员变量的结构体变量,并在所述成员变量所占用的内存空间中存储所述数据成员,最终向数据接收节点发送所述结构体变量,以使数据接收节点在接收所述结构体变量之后,直接提取所述结构体变量中的所述数据成员,在本实施例中任意一个数据节点接收和发送数据时,直接将数据拷贝到结构体变量中,无需进行拆包和组包,进而有利于提高数据处理效率、更好地利用数据空间。
请参阅图2,图2是本发明第二实施例提供的一种数据处理方法的流程示意图,本发明实施例的所述方法可以应用在诸如智能手机、平板电脑、智能可穿戴设备、车载设备等带通信网络功能的终端中,具体可由这些通信终端的处理器来实现。如图2所示,包括以下步骤:
S201、终端预定义待接收的数据来源标识。
S202、终端接收数据发送节点发送的包括至少一个数据成员的数据。
S203、终端检测所述数据发送节点标识与所述预定义的待接收的数据来源标识是否匹配。
S204、终端若检测到所述数据发送节点标识与所述预定义的待接收的数据来源标识匹配,生成用于存储所述数据成员的成员变量,并确定所述成员变量占用的存储空间为所述数据成员占用的存储空间。
S205、终端确定包括所述成员变量的结构体变量的指定对齐值。
S206、终端生成包括所述成员变量的结构体变量。
S207、终端确定所述数据成员的存储格式,在所述成员变量所占用的内存空间中按照所述存储格式存储所述数据成员并在所述成员变量所占用的内存空间中存储所述数据成员。
S208、终端替换所述结构体变量中存储的所述数据成员为目标数据成员。
S209、终端向数据接收节点发送所述结构体变量,所述结构体变量用于指示数据接收节点在接收所述结构体变量之后,提取所述结构体变量中的所述数据成员。
可以看出,本发明实施例技术方案中,终端接收数据发送节点发送的包括至少一个数据成员的数据,根据数据成员的不同生成不同的用于存储所述数据成员的成员变量去分区,并以指定位大小的方式确定所述成员变量占用的存储空间为所述数据成员占用的存储空间,然后生成包括所述成员变量的结构体变量,并在所述成员变量所占用的内存空间中存储所述数据成员,最终向数据接收节点发送所述结构体变量,以使数据接收节点在接收所述结构体变量之后,直接提取所述结构体变量中的所述数据成员,在本实施例中任意一个数据节点接收和发送数据时,直接将数据拷贝到结构体变量中,无需进行拆包和组包,进而有利于提高数据处理效率、更好地利用数据空间。
下面为本发明装置实施例,本发明装置实施例用于执行本发明方法实施例一至二实现的方法,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例一和实施例二。
请参阅图3,图3是本发明第三实施例提供的一种数据处理装置的结构示意图,本发明实施例的所述装置可设置在在诸如智能手机、平板电脑、智能可穿戴设备、车载设备等带通信网络功能的终端中,如图3所示,上述数据处理装置包括接收模块301、第一处理模块302、第二处理模块303、发送模块304,其中:
所述接收模块301,用于接收数据发送节点发送的包括至少一个数据成员的数据。
可以理解地,当CAN总线上的一个节点(站)发送数据时,它以报文形式广播给网络中所有节点。对每个节点来说,无论数据是否是发给自己的,都对其进行接收。每组报文开头为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案,在同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文。当一个站要向其它站发送数据时,该站的CPU将要发送的数据和自己的标识符传送给本站的CAN芯片,并处于准备状态;当它收到总线分配时,转为发送报文状态。CAN芯片将数据根据协议组织成一定的报文格式发出,这时网上的其它站处于接收状态。每个处于接收状态的站对接收到的报文进行检测,判断这些报文是否是发给自己的,以确定是否接收它。
所述第一处理模块302,用于生成用于存储所述数据成员的成员变量,并确定所述成员变量占用的存储空间为所述数据成员占用的存储空间。
所述第二处理模块303,用于生成包括所述成员变量的结构体变量,并在所述成员变量所占用的内存空间中存储所述数据成员。
可以理解地,根据所述数据成员的不同生成用于存储所述数据成员的不同的成员变量,由成员变量名即可知道每个数据成员的含义,解决了现有技术中,传统数组方式在没有保温对照的情况下不知道每个字节所代表的含义以及每位代表的含义。
所述发送模块304,用于向数据接收节点发送所述结构体变量,所述结构体变量用于指示数据接收节点在接收所述结构体变量之后,提取所述结构体变量中的所述数据成员。
作为一种可选的实施方式,所述第二处理模块303,具体用于确定所述数据成员的存储格式;在所述成员变量所占用的内存空间中按照所述存储格式存储所述数据成员。
可以理解的,一般情况下,在定义CAN总线信号定义时,都会明确定义字节的发送顺序,即:以首先发送byte0(LSB),然后byte1,byte2,……byte7(MSB)的发送顺序;还是以首先发送byte7(MSB),然后byte6,byte5,……byte0(LSB)的发送顺序。目前,在实践和研究过程中发现,多个主机厂定义的CAN总线字节发送顺序均为前者,即首先发送LSB,最后发送MSB。
采用Intel格式编码的CAN总线信号为:当一个信号的数据长度不超过1个字节(8位)并且信号在一个字节内实现(即,该信号没有跨字节实现)时,该信号的高位将被放在该字节的高位,信号的低位将被放在该字节的低位,这样,信号的起始位就是该字节的低位;当一个信号的数据长度超过1个字节(8位)或者数据长度不超过一个字节但是采用跨字节方式实现时,该信号的高位将被放在高字节(MSB)的高位,信号的低位将被放在低字节(LSB)的低位,这样,信号的起始位就是低字节的低位。采用Motel格式编码的CAN总线信号为:当一个信号的数据长度不超过1个字节(8位)并且信号在一个字节内实现(即,该信号没有跨字节实现)时,信号的高位将被放在该字节的高位,信号的低位将被放在该字节的低位,这样,信号的起始位就是该字节的低位。当一个信号的数据长度超过1个字节(8位)或者数据长度不超过一个字节但是采用跨字节方式实现时,该信号的高位将被放在低字节(MSB)的高位,信号的低位将被放在高字节(LSB)的低位,这样,信号的起始位就是高字节的低位。
因为结构的存储格式可以设置,因此通过设置结构体的存储格式即可实现Intel传输格式与Motel传输格式的改变。
作为一种可选的实施方式,所述第二处理模块303,还用于确定包括所述成员变量的结构体变量的指定对齐值。
可以理解地,结构体是一种复合数据类型,其构成元素既可以是基本数据类型(如整形int、长整形long、浮点float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然边界分配空间,各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同,为了使CPU能够对变量进行快速的访问,变量的起始地址应该具有某些特性,即所谓的“对齐”,比如4字节的int型,其起始地址应该位于4字节的边界上,即起始地址能够被4整除。字节对齐的作用不仅是便于CPU快速访问,同时也可以通过合理地利用字节对齐实现有效地节省存储空间。CAN数据传输采用短帧结构,每一帧的有效字节为8个,当给定的数据不超过8个字节时,可以使用CAN数据帧的全部的8个字节,当给定的数据超过8个字节时,可以通过多个CAN数据帧实现数据传输。
作为一种可选的实施方式,所述接收的数据携带所述数据发送节点标识;
所述装置还包括预定义模块,用于接收模块接收数据发送节点发送的包括至少一个数据成员的数据之前,预定义待接收的数据来源标识;
所述装置还包括检测模块,用于接收模块接收数据发送节点发送的包括至少一个数据成员的数据之后,若检测到所述数据发送节点标识与所述预定义的待接收的数据来源标识匹配,触发第一处理模块执行所述生成用于存储所述数据成员的成员变量的步骤。
作为一种可选的实施方式,所述数据成员占用的存储空间不大于所述生成的用于存储所述数据成员的成员变量的占用的标准存储空间。
作为一种可选的实施方式,所述装置还包括修改模块,用于第二处理模块在所述成员变量所占用的内存空间中存储所述数据成员之后,发送模块所述向数据接收节点发送所述结构体变量之前,替换所述结构体变量中存储的所述数据成员为目标数据成员。
可以看出,本发明实施例技术方案中,终端接收数据发送节点发送的包括至少一个数据成员的数据,根据数据成员的不同生成不同的用于存储所述数据成员的成员变量去分区,并以指定位大小的方式确定所述成员变量占用的存储空间为所述数据成员占用的存储空间,然后生成包括所述成员变量的结构体变量,并在所述成员变量所占用的内存空间中存储所述数据成员,最终向数据接收节点发送所述结构体变量,以使数据接收节点在接收所述结构体变量之后,直接提取所述结构体变量中的所述数据成员,在本实施例中任意一个数据节点接收和发送数据时,直接将数据拷贝到结构体变量中,无需进行拆包和组包,进而有利于提高数据处理效率、更好地利用数据空间。
请参考图4,图4是本发明第四实施例公开的一种数据处理装置的结构示意图。本发明实施例的所述装置可设置在在诸如智能手机、平板电脑、智能可穿戴设备、车载设备等带通信网络功能的终端中,如图4所示,本发明实施例中的数据处理装置包括:至少一个处理器401,例如CPU,至少一个接收器403,至少一个存储器404,至少一个发送器405,至少一个通信总线402。其中,通信总线402用于实现这些组件之间的连接通信。其中,本发明实施例中装置的接收器403和发送器405可以是有线发送端口,也可以为无线设备,例如包括天线装置,用于与其他节点设备进行信令或数据的通信。存储器404可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器404可选的还可以是至少一个位于远离前述处理器401的存储装置。存储器404中存储一组程序代码,且处理器401用于调用存储器中存储的程序代码,用于执行以下操作:
接收数据发送节点发送的包括至少一个数据成员的数据。
可以理解地,当CAN总线上的一个节点(站)发送数据时,它以报文形式广播给网络中所有节点。对每个节点来说,无论数据是否是发给自己的,都对其进行接收。每组报文开头为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案,在同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文。当一个站要向其它站发送数据时,该站的CPU将要发送的数据和自己的标识符传送给本站的CAN芯片,并处于准备状态;当它收到总线分配时,转为发送报文状态。CAN芯片将数据根据协议组织成一定的报文格式发出,这时网上的其它站处于接收状态。每个处于接收状态的站对接收到的报文进行检测,判断这些报文是否是发给自己的,以确定是否接收它。
所述处理器401,还用于生成用于存储所述数据成员的成员变量,并确定所述成员变量占用的存储空间为所述数据成员占用的存储空间。
可以理解地,根据所述数据成员的不同生成用于存储所述数据成员的不同的成员变量,由成员变量名即可知道每个数据成员的含义,解决了现有技术中,传统数组方式在没有保温对照的情况下不知道每个字节所代表的含义以及每位代表的含义。
所述处理器401,还用于生成包括所述成员变量的结构体变量,并在所述成员变量所占用的内存空间中存储所述数据成员。
所述处理器401,还用于数据接收节点发送所述结构体变量,所述结构体变量用于指示数据接收节点在接收所述结构体变量之后,提取所述结构体变量中的所述数据成员。
作为一种可选的实施方式,在所述成员变量所占用的内存空间中存储所述数据成员包括:
确定所述数据成员的存储格式;
在所述成员变量所占用的内存空间中按照所述存储格式存储所述数据成员。
可以理解的,一般情况下,在定义CAN总线信号定义时,都会明确定义字节的发送顺序,即:以首先发送byte0(LSB),然后byte1,byte2,……byte7(MSB)的发送顺序;还是以首先发送byte7(MSB),然后byte6,byte5,……byte0(LSB)的发送顺序。目前,在实践和研究过程中发现,多个主机厂定义的CAN总线字节发送顺序均为前者,即首先发送LSB,最后发送MSB。
采用Intel格式编码的CAN总线信号为:当一个信号的数据长度不超过1个字节(8位)并且信号在一个字节内实现(即,该信号没有跨字节实现)时,该信号的高位将被放在该字节的高位,信号的低位将被放在该字节的低位,这样,信号的起始位就是该字节的低位;当一个信号的数据长度超过1个字节(8位)或者数据长度不超过一个字节但是采用跨字节方式实现时,该信号的高位将被放在高字节(MSB)的高位,信号的低位将被放在低字节(LSB)的低位,这样,信号的起始位就是低字节的低位。采用Motel格式编码的CAN总线信号为:当一个信号的数据长度不超过1个字节(8位)并且信号在一个字节内实现(即,该信号没有跨字节实现)时,信号的高位将被放在该字节的高位,信号的低位将被放在该字节的低位,这样,信号的起始位就是该字节的低位。当一个信号的数据长度超过1个字节(8位)或者数据长度不超过一个字节但是采用跨字节方式实现时,该信号的高位将被放在低字节(MSB)的高位,信号的低位将被放在高字节(LSB)的低位,这样,信号的起始位就是高字节的低位。
因为结构的存储格式可以设置,因此通过设置结构体的存储格式即可实现Intel传输格式与Motel传输格式的改变。
作为一种可选的实施方式,所述生成包括所述成员变量的结构体变量之前,还包括:
确定包括所述成员变量的结构体变量的指定对齐值。
可以理解地,结构体是一种复合数据类型,其构成元素既可以是基本数据类型(如整形int、长整形long、浮点float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然边界分配空间,各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同,为了使CPU能够对变量进行快速的访问,变量的起始地址应该具有某些特性,即所谓的“对齐”,比如4字节的int型,其起始地址应该位于4字节的边界上,即起始地址能够被4整除。字节对齐的作用不仅是便于CPU快速访问,同时也可以通过合理地利用字节对齐实现有效地节省存储空间。CAN数据传输采用短帧结构,每一帧的有效字节为8个,当给定的数据不超过8个字节时,可以使用CAN数据帧的全部的8个字节,当给定的数据超过8个字节时,可以通过多个CAN数据帧实现数据传输。
作为一种可选的实施方式,所述接受的数据携带所述数据发送节点标识;
所述接收数据发送节点发送的包括至少一个数据成员的数据之前,所述方法还包括:
预定义待接收的数据来源标识;
所述接收数据发送节点发送的包括至少一个数据成员的数据之后,还包括:
若检测到所述数据发送节点标识与所述预定义的待接收的数据来源标识匹配,触发执行所述生成用于存储所述数据成员的成员变量的步骤。
作为一种可选的实施方式,所述数据成员占用的存储空间不大于所述生成的用于存储所述数据成员的成员变量的占用的标准存储空间。
作为一种可选的实施方式,在所述成员变量所占用的内存空间中存储所述数据成员之后,所述向数据接收节点发送所述结构体变量之前,还包括:
替换所述结构体变量中存储的所述数据成员为目标数据成员。
可以看出,本发明实施例技术方案中,终端接收数据发送节点发送的包括至少一个数据成员的数据,根据数据成员的不同生成不同的用于存储所述数据成员的成员变量去分区,并以指定位大小的方式确定所述成员变量占用的存储空间为所述数据成员占用的存储空间,然后生成包括所述成员变量的结构体变量,并在所述成员变量所占用的内存空间中存储所述数据成员,最终向数据接收节点发送所述结构体变量,以使数据接收节点在接收所述结构体变量之后,直接提取所述结构体变量中的所述数据成员,在本实施例中任意一个数据节点接收和发送数据时,直接将数据拷贝到结构体变量中,无需进行拆包和组包,进而有利于提高数据处理效率、更好地利用数据空间。
本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的任何一种服务进程的监控方法的部分或全部步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取器(英文:Random Access Memory,简称:RAM)、磁盘或光盘等。
以上对本发明实施例进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上上述,本说明书内容不应理解为对本发明的限制。
Claims (12)
1.一种数据处理方法,其特征在于,所述数据处理方法应用于CAN数据传输领域,所述方法包括:
接收数据发送节点发送的包括至少一个数据成员的数据,所述数据为控制器局域网络CAN数据;
生成用于存储每个数据成员的至少一个成员变量,并通过指定位大小的方式确定每个成员变量占用的存储空间为所述每个数据成员占用的存储空间;
生成包括所述至少一个成员变量的结构体变量,设置结构体变量的存储格式,以使结构体变量的存储格式与CAN数据的传输格式关联,所述CAN数据的传输格式包括Intel格式或Motel格式,并在所述每个成员变量所占用的内存空间中存储所述每个数据成员;
向数据接收节点发送所述结构体变量,所述结构体变量用于指示数据接收节点在接收所述结构体变量之后,提取所述结构体变量中的所述数据成员。
2.如权利要求1所述的方法,其特征在于,在所述成员变量所占用的内存空间中存储所述数据成员包括:
确定所述数据成员的存储格式;
在所述成员变量所占用的内存空间中按照所述存储格式存储所述数据成员。
3.如权利要求1所述的方法,其特征在于,所述生成包括所述成员变量的结构体变量之前,所述方法还包括:
确定包括所述成员变量的结构体变量的指定对齐值。
4.如权利要求1所述的方法,其特征在于,所述接收的数据携带所述数据发送节点标识;
所述接收数据发送节点发送的包括至少一个数据成员的数据之前,所述方法还包括:
预定义待接收的数据来源标识;
所述接收数据发送节点发送的包括至少一个数据成员的数据之后,所述方法还包括:
若检测到所述数据发送节点标识与所述预定义的待接收的数据来源标识匹配,触发执行所述生成用于存储所述数据成员的成员变量的步骤。
5.如权利要求1所述的方法,其特征在于,所述数据成员占用的存储空间不大于所述生成的用于存储所述数据成员的成员变量的占用的标准存储空间。
6.如权利要求1至5任一项所述的方法,其特征在于,在所述成员变量所占用的内存空间中存储所述数据成员之后,所述向数据接收节点发送所述结构体变量之前,所述方法还包括:
替换所述结构体变量中存储的所述数据成员为目标数据成员。
7.一种数据处理装置,其特征在于,所述数据处理装置应用于CAN数据传输领域,所述装置包括:
接收模块,用于接收数据发送节点发送的包括至少一个数据成员的数据,所述数据为控制器局域网络CAN数据;
第一处理模块,用于生成用于存储每个数据成员的至少一个成员变量,并通过指定位大小的方式确定每个成员变量占用的存储空间为每个数据成员占用的存储空间;
第二处理模块,用于生成包括所述至少一个成员变量的结构体变量,设置结构体变量的存储格式,以使结构体变量的存储格式与CAN数据的传输格式关联,所述CAN数据的传输格式包括Intel格式或Motel格式,并在所述每个成员变量所占用的内存空间中存储所述每个数据成员;
发送模块,用于向数据接收节点发送所述结构体变量,所述结构体变量用于指示数据接收节点在接收所述结构体变量之后,提取所述结构体变量中的所述数据成员。
8.如权利要求7所述的装置,其特征在于,
所述第二处理模块,具体用于确定所述数据成员的存储格式;在所述成员变量所占用的内存空间中按照所述存储格式存储所述数据成员。
9.如权利要求7所述的装置,其特征在于,
所述第二处理模块,还用于确定包括所述成员变量的结构体变量的指定对齐值。
10.如权利要求7所述的装置,其特征在于,所述接收的数据携带所述数据发送节点标识;
所述装置还包括预定义模块,用于接收模块接收数据发送节点发送的包括至少一个数据成员的数据之前,预定义待接收的数据来源标识;
所述装置还包括检测模块,用于接收模块接收数据发送节点发送的包括至少一个数据成员的数据之后,若检测到所述数据发送节点标识与所述预定义的待接收的数据来源标识匹配,触发第一处理模块执行所述生成用于存储所述数据成员的成员变量的步骤。
11.如权利要求7所述的装置,其特征在于,所述数据成员占用的存储空间不大于所述生成的用于存储所述数据成员的成员变量的占用的标准存储空间。
12.如权利要求7至11任一项所述的装置,其特征在于,所述装置还包括:
修改模块,用于第二处理模块在所述成员变量所占用的内存空间中存储所述数据成员之后,发送模块所述向数据接收节点发送所述结构体变量之前,替换所述结构体变量中存储的所述数据成员为目标数据成员。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510765606.9A CN105450488B (zh) | 2015-11-11 | 2015-11-11 | 一种数据处理方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510765606.9A CN105450488B (zh) | 2015-11-11 | 2015-11-11 | 一种数据处理方法及相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105450488A CN105450488A (zh) | 2016-03-30 |
CN105450488B true CN105450488B (zh) | 2019-10-22 |
Family
ID=55560292
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510765606.9A Expired - Fee Related CN105450488B (zh) | 2015-11-11 | 2015-11-11 | 一种数据处理方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105450488B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107741833B (zh) * | 2017-10-30 | 2021-02-05 | 广东乐心医疗电子股份有限公司 | 可嵌套的key-value的存储方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101695086A (zh) * | 2009-10-16 | 2010-04-14 | 深圳市五巨科技有限公司 | 一种获取移动终端客户端信息的方法和装置 |
CN102664962A (zh) * | 2012-05-11 | 2012-09-12 | 山东轻工业学院 | 基于ZigBee的无线测控网络的动态节点身份实现方法及系统 |
CN104572655A (zh) * | 2013-10-12 | 2015-04-29 | 腾讯科技(北京)有限公司 | 数据处理的方法、装置及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2898752A1 (fr) * | 2006-03-20 | 2007-09-21 | Thomson Licensing Sas | Procede et dispositif d'asssemblage de paquets de donnees |
-
2015
- 2015-11-11 CN CN201510765606.9A patent/CN105450488B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101695086A (zh) * | 2009-10-16 | 2010-04-14 | 深圳市五巨科技有限公司 | 一种获取移动终端客户端信息的方法和装置 |
CN102664962A (zh) * | 2012-05-11 | 2012-09-12 | 山东轻工业学院 | 基于ZigBee的无线测控网络的动态节点身份实现方法及系统 |
CN104572655A (zh) * | 2013-10-12 | 2015-04-29 | 腾讯科技(北京)有限公司 | 数据处理的方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN105450488A (zh) | 2016-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107396287A (zh) | 一种工作频点的选取方法及装置 | |
PT1856943E (pt) | Utilização de atribuições suplementares | |
CN109918203A (zh) | 接入服务器内存管理优化方法、接入服务器及通信系统 | |
CN109547574A (zh) | 一种数据传输方法及相关装置 | |
CN103118149A (zh) | 同一租户内服务器间的通信控制方法及网络设备 | |
CN107925855A (zh) | D2d的资源分配方法、设备及系统 | |
CN103457748A (zh) | 数据传输方法、系统和设备 | |
CN107968848B (zh) | 一种获取ip地址的方法、终端设备及存储介质 | |
CN112769738B (zh) | DetNet数据包处理方法及装置 | |
CN104270362A (zh) | 请求处理方法和装置 | |
CN114710571A (zh) | 数据包处理系统 | |
CN105450488B (zh) | 一种数据处理方法及相关装置 | |
CN107357740B (zh) | 一种序列化器自动配置方法、装置及分布式缓存系统 | |
CN109586970A (zh) | 资源分配方法、装置及系统 | |
CN106302432B (zh) | 一种基于车联网的通信装置及控制方法 | |
CN112422485B (zh) | 一种传输控制协议的通信方法及装置 | |
CN111315026B (zh) | 信道的选择方法、装置、网关及计算机可读存储介质 | |
CN109639555B (zh) | 链路层报文生成方法、链路层报文生成装置及终端设备 | |
CN105191419B (zh) | 使得设备能经由网络控制器或组拥有者来发现服务 | |
CN104375871B (zh) | 一种基于eMMC加速系统开机的方法和装置 | |
CN111162942A (zh) | 一种集群选举方法及系统 | |
CN106657097B (zh) | 一种数据发送方法及装置 | |
CN106789440B (zh) | 一种ip包包头检测方法及装置 | |
CN106657436B (zh) | 报文处理方法和装置 | |
US20170346753A1 (en) | Method and device for forwarding data messages |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20191022 Termination date: 20201111 |
|
CF01 | Termination of patent right due to non-payment of annual fee |