HEX数据包
首先数据包的作用,把一个个单独的数据给封装起来,方便进行对字节的数据通信。
在HEX数据包里面,数据都是以原始的字节数据本身呈现。
两种数据包格式:
- 固定包长,含包头包尾:每个数据包的长度都固定不变,数据包前面是包头,后面是包尾。
- 可变包长,含包头包尾:每个数据包的长度可以不一样,可以根据需求,进行规定。
文本数据包
以@字符作为包头,\r\n作为包尾,在载荷数据中间可以出现除了包头包尾的任意字符,所以很灵活,当接收到数据之后,得到的就是一个字符串,在软件中再对字符串进行操作和判断,就可以实现各种指令控制的功能了。
两种数据包格式的对比
HEX数据包
- 优点:传输直接,解析数据非常简单,适用于模块发送原始数据。
- 确定:灵活性不足,载荷容易和包头包尾重复。
文本数据包
- 优点:数据非常直观容易理解,灵活性很高,适用于输入指令的人机交互的场合。
- 缺点:解析效率较低。
HEX数据包接收
格式为固定包长
- 每收到一个字节,程序都会进一遍中断,在中断函数里可以拿到这个字节,随即要退出中断,所以每次拿数据都是独立的过程,而数据包具有前后关联性。
- 对此需要设计能记住不同状态的机制,在不同状态执行不同的操作,同时还要进行状态的合理转移
- 因此如图所示,定义三个状态,第一个是等待包头、第二个是接收数据、第三个是等待包尾,每个状态分别用一个变量进行标志。
文本数据包接收
格式为可变包长
同理也是定义三个状态:
- 第一个等待包头,判断收到的是否为规定的字符,如果收到,将进入下一状态。
- 第二状态依次接收数据,判断是否为\r,如果不是,正常接收;如果是,则不接收,同时跳到下一状态等待包尾\n 同时,此状态还应该要兼具等待包尾的功能(因为格式为可变包长,接收数据时,需要时刻监视,是否收到包尾)。
- 如果包尾只有一个字符,出现包尾后可直接回到初始状态。