在软件开发过程中,串口读写功能应该是必修课,读写内容会包含字符串、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 |