电子产业一站式赋能平台

PCB联盟网

搜索
查看: 25|回复: 0
收起左侧

嵌入式软件通信协议,如何进行数据序列化?

[复制链接]

579

主题

579

帖子

4534

积分

四级会员

Rank: 4

积分
4534
发表于 昨天 17:50 | 显示全部楼层 |阅读模式
我是老温,一名热爱学习的嵌入式工程师3 P# |# D) w$ ?- a
关注我,一起变得更加优秀!通信协议可以理解两个节点之间为了协同工作实现信息交换,协商一定的规则和约定,例如规定字节序,各个字段类型,使用什么压缩算法或加密算法等。
( {: v. \9 I3 \0 l! |7 Q% V常见的有tcp,udo,http,sip等常见协议。协议有流程规范和编码规范。流程如呼叫流程等信令流程,编码规范规定所有信令和数据如何打包/解包。* J  ]$ L' W. \
编码规范就是我们通常所说的编解码,序列化。不光是用在通信工作上,在存储工作上我们也经常用到。
9 ~9 e4 S* n$ x# M如我们经常想把内存中对象存放到磁盘上,就需要对对象进行数据序列化工作。( Q( b& Q9 A" U0 m  B
本文采用先循序渐进,先举一个例子,然后不断提出问题-解决完善,这样一个迭代进化的方式,介绍一个协议逐步进化和完善,最后总结。4 W% h" T( i9 ]1 b
看完之后,大家以后在工作就很容易制定和选择自己的编码协议。( l# {3 ?6 I. n8 v0 m
一、紧凑模式本文例子是A和B通信,获取或设置基本资料,一般开发人员第一步就是定义一个协议结构:" l  _0 b8 E( C
struct userbase# Q# I; Q, ^" Z* g2 G
{
7 S: @- B4 a' I1 N    unsigned short cmd;//1-get, 2-set, 定义一个short,为了扩展更多命令(理想那么丰满)4 v% a: @$ C2 A) z
    unsigned char gender; //1 – man , 2-woman, 3 - ??: [) q, G# e7 D. M- K$ Y
    char name[8]; //当然这里可以定义为 string name;或len + value 组合,为了叙述方便,就使用简单定长数据
* s9 g' S, W$ Q6 s' Z2 P; E}1 p0 O" g8 n% f  F
在这种方式下,A基本不用编码,直接从内存copy出来,再把cmd做一下网络字节序变换,发送给B。B也能解析,一切都很和谐愉快。7 L1 ^6 q4 R7 L5 `7 m
这时候编码结果可以用图表示为(1格一个字节)
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条


联系客服 关注微信 下载APP 返回顶部 返回列表