C语言串口组包方式

       在软件开发过程中,串口读写功能应该是必修课,读写内容会包含字符串、16进制数组等,而且会涉及到通信的数据格式,针对串口的通信功能来说,个人认为串口的读还是较为有点难度,因为涉及到数据的解析,串口有时候读取的数据并不是一条完整的数据,例如,一条完整的数据内容为:0xaa 0xbb 0xcc 0xdd 0x99 0x88 0x77 0x66 0x00 0x78 0x16 0x80,但往往在串口的读数据时,会出现一包无法读取完毕的现象,很可能上述的数据会分两次读取完毕,比如第一包读取内容为:0xaa 0xbb 0xcc 0xdd 0x99 0x88,第二包读取内容为:0x77 0x66 0x00 0x78 0x16 0x80,此种情况我们必须要对读取到的数据进行组包。字符串的组包方式可以根据字符串的格式来进行,本文只介绍16进制方式的组包。

状态机方式

适用于有限的条件【数据内容的长度一定要知道】,状态机的方式比较通用,可以根据数据格式来确认数据解包时的状态,最终实现解析一个完整的数据包;实例参照如下:

数据格式定义

数据通信协议

类型

内容

字节数

说明

消息头

Head

2

消息包头(0xFF 0xEE)

Len

2

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值