结构体在协议处理中的妙用

姓名:仝启龙   学号:17101223413

本文转自

嵌入式系统开发者之家

【嵌牛导读】

在网络协议、通信控制、嵌入式系统的C/C++编程中,我们经常要传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整体,其表现形式是一个结构体。

【嵌牛鼻子】结构体,通信协议,单片机通信

【嵌牛提问】什么是结构体?什么是通信协议?单片机如何用结构体实现通信

【嵌牛正文】

结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合。在C语言中,结构体(struct)指的是一种数据结构,是聚合数据类型。

通信协议又称通信规程,是指通信双方对数据传送控制的一种约定。约定中包括对数据格式,同步方式,传送速度,传送步骤,检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。电脑与电脑之间的沟通必须讲述相同的语言,才能互相传输信息。这些规格(语言)的规定都是事先在会议上讲好的,一般我们称之为“协议”(protocol)。

单片机控制系统中会经常用到不同的系统间通讯功能,每种通讯方式都有其自有的数据通讯协议。编写程序的时候,就需要进行各种接收数据的协议解析与发送数据的协议数据打包工作。结构体定义的数据结构,可以像一套模具一样,把接收到的数据按照固定的模式进行解析读取操作,也可以非常方便的按照结构非常方便的填充数据,完成协议数据打包工作。

比如:某单片机系统通过串行通讯端口以115200bps的速率与PC软件进行数据通讯。通讯功能非常简单:PC下发一个字节的数据采集指令,当单片机系统接收到这个字节后,一次上传温度、压力、A相电压、B相电压、C相电压、A相电流、B相电流、C相电流。为了方便单片机系统进行上传数据内容的打包,现根据协议形式,定义一个结构体:


结构体在协议处理中的妙用_第1张图片

sendData即为要上传的协议数据包。当接收到协议数据包的系统解析数据内容的时候,也可以用类似的方法,只不过,这次是使用结构体指针,指向数据接收缓冲区的首地址!


结构体在协议处理中的妙用_第2张图片

datPtr结构体指针,可以非常自如的指向任何一个缓冲区中的数据元素,如此操作,对于解析协议数据来说,是非常享受的一个过程。

通过上面简单的代码演示,大家可以非常直接的看到,灵活的使用结构体进行通讯协议数据的打包与解析工作是非常方便的!因为使用结构体,可以随时随地的改变协议数据类型、数据的位置、修改数据种类,而用户的应用程序,只需要修改结构体定义的内容而已,通过本文的描述,希望大家在日后的工作过程中能够灵活的使用这种方法。

你可能感兴趣的:(结构体在协议处理中的妙用)