大数跨境

SOME/IP序列化的那些事!

SOME/IP序列化的那些事! 怿星科技
2019-02-18
3
导读:继上篇《SOME/IP有那么难吗?》与大家分享了SOME/IP及SD的概念后,今天我们将分享的内容是SOME/IP序列化的那些事。

继上篇《SOME/IP有那么难吗?》与大家分享了SOME/IP及SD的概念后,今天我们将分享的内容是SOME/IP序列化的那些事。


何为序列化

序列化(Serialization)数据结构或对象依据事先定义的规则转换成二进制串的过程。

反序列化(Deserialization):将二进制串依据相同规则重新构建成数据结构或对象的过程。

举个栗子

张三在网上报名参加北电艺考,要求填写的报名信息有: 性别、年龄、身高、体重、身份证号。张三在本地电脑填写完成后,这些信息通过序列化操作转换成二进制数据串,数据串通过网络传输到报名系统服务器,报名系统通过反序列化操作将二进制数据串还原成对象信息。


SOME/IP的序列化过程

序列化在AUTOSAR中是指数据在协议数据单元(PDU)中的表达形式,可以理解为来自应用层的真实数据转换成固定格式的字节序,以实现数据在网络上的传输。软件模块(SWC)将数据(前一篇文章中提到的服务接口的数据内容)从应用层传递到RTE层,在RTE层调用SOME/IP Transformer,执行可配置的数据序列化(Serialize)或反序列化(Deserialize)。SOME/IP Serializer将结构体形式的数据序列化为线性结构的数据;SOME/IP Deserializer将线性结构数据再反序列化为结构体形式数据。在服务端,数据经过SOME/IP Serializer序列化后,被传输到服务层的COM模块;在客户端,数据从COM模块传递到SOME/IP Deserializer反序列化后再进入RTE层。


那么SOME/IP如何实现序列化呢?(以下所有序列化过程暂不考虑对齐Alignment, 待后续分享)


基本数据类型的序列化

SOME/IP目前支持的基本数据类型有这么多:

类型

描述

大小(bit)

boolean

TRUE/FALSE

8

uint8

unsigned integer

8

uint16

unsigned integer

16

uint32

unsigned integer

32

uint64

unsigned integer

64

sint8

signed integer

8

sint16

signed integer

16

sint32

signed integer

32

sint64

signed integer

64

float32

floating point number

32

float64

floating point number

64

规则:通过设定字节序(大端or小端)实现序列化。

Example:一个unit32类型数据(0x1A3B5C7D)的序列化。


Byte0 Byte1 Byte2 Byte3

大端

(Big Endian)

1A 3B 5C
7D

小端

(Little Endian)  

7D 5C 3B 1A


结构体(Structs)的序列化

定义:结构体由多个数据元素构成,也可嵌套另一个结构体。

规则:

①将结构体的数据元素顺序排列,然后将各个元素依次进行序列化。

②可增加Length Field来指示结构体中数据元素的字节长度,而嵌套的结构体,也同样需要增加Length Field。

Example: Struct_1包含一个unit32类型的数据,一个float32类型的数组和嵌套的结构体Struct_2,序列化的过程见下图。



定长字符串(Fixed Length Strings)的序列化

定义:String由一系列的Unicode字符构成,并以“\0”(0x00)结束。

规则:

①在String之前增加BOM(Byte Order Mark),用以识别编码类型(UTF8,UTF16BE, UTF16LE)。

UTF编码

Byte Order Mark (BOM)

UTF-8

EF BB BF

UTF-16BE

FF FE

UTF-16LE

FE FF

②填加String的编码数据流。

③结束符:UTF8以1个“\0”(0x00)结束,UTF16以2个“\0”(0x00,0x00)结束。

Example:假设SOME/IP数据段包含两个字符串成员,分别以UTF8和UTF16LE编码,具体如下:

➤成员1(UTF8,长度18字节):“怿星EPT”(对应编码:E680BF, E6989F, 45, 50, 54)

➤成员2(UTF16LE,长度18字节): “招聘ing”(对应编码:62DB, 8058, 0069, 006E, 0067)

注:黄色填充部分为结束符”\0”; 红色填充部分为未用字节的填充。

动态长度字符串(Dynamic Length Strings)的序列化

规则:基于定长String的规则,在BOM之前增加Length Field,以指示动态字符串字节长度。

Example: 假设我们要传输歌曲名称,以UTF8编码(设定Length Field为2bytes)。

➤歌曲1:“贝贝”(对应编码:E8B49D,E8B49D)

➤歌曲2:“Familia”(对应编码:46, 61, 6D, 69, 6C, 69, 61)


定长数组(Fixed Length Arrays)的序列化

定义:数组是相同类型数据的集合。

规则:依据数组元素的顺序依次排列,并进行序列化。

Example:一维数组由3个元素(unit8类型)构成,序列化的过程见下图。

动态长度数组(Dynamic Length Arrays)的序列化

规则:基于定长数组序列化规则,在Arrays之前增加Length Field,以指示数组中有效元素的字节大小。

Example:设定Length Field为2bytes,一维数组由3个元素(unit16类型)构成,序列化的过程见下图。

其他类型数据(如: union, multidimensional arrays等)的序列化不再赘述,可以参考SOME/IP规范。


简单来讲,通过SOME/IP数据序列化的过程,保证了数据传输的有序性,使Client能够正确解析从Server端发送过来的数据。以上是本次分享的内容,后续我们将继续与您分享更多关于汽车以太网技术的专题介绍。


相关精彩推荐:

SOME/IP有那么难吗?

10M汽车以太网竟然是总线型的!

汽车以太网对TCP/IP协议簇的应用

汽车以太网协议知多少

关于以太网物理层测试

面向服务通信与面向信号通信

以太网与CAN的区别

车载以太网开发测试解决方案





怿星一意,专注车载

引领汽车科技新高度





【声明】内容源于网络
0
0
怿星科技
让智能汽车研发更高效!
内容 428
粉丝 0
怿星科技 让智能汽车研发更高效!
总阅读1.1k
粉丝0
内容428