美文网首页嵌牛IT观察
结构体在协议处理中的妙用

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

作者: 軒轅龍 | 来源:发表于2017-11-26 19:41 被阅读0次

姓名:仝启龙   学号:17101223413

本文转自

嵌入式系统开发者之家

【嵌牛导读】

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

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

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

【嵌牛正文】

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

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

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

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

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

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

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

相关文章

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

    姓名:仝启龙 学号:17101223413 本文转自 嵌入式系统开发者之家 【嵌牛导读】 在网络协议、通信控制、...

  • Swift中mutating关键字

    结构体枚举或者协议中,使用mutating修饰的方法,可以在该方法内部修改结构体,枚举,或者协议的属性变量。 对值...

  • FFmpeg学习之三(常用结构体)

    @TOC 常用结构体 FFMPEG中结构体很多。最关键的结构体可以分成以下几类: 解协议(http,rtsp,rt...

  • Swift学习笔记-协议

    Swift中的协议类似于Java中的接口,不过在Swift中,结构体,枚举,类都能使用协议 基本用法 符合多个协议...

  • c语言结构体在 ios蓝牙socket协议的妙用

    ios中不一定需要c构建协议。但是总体来说用c语言来说相对对数据处理友好方便一些,不像oc那样笨重,毕竟c是做底层...

  • Swift进阶:traits/mixins/协议扩展的使用场景总

    实现步骤: 声明协议 - 扩展协议(实现默认方法)- 协议添加给类型或具体功能类或者结构体( - 在类中 - (重...

  • OC中Category分析

    分类的底层结构 实现原理 将方法、属性、协议数据保存在category_t的结构体中,然后将结构体中的方法列表拷贝...

  • 十三:FFMPEG中结构体

    FFMPEG中结构体很多。最关键的结构体可以分成以下几类: 解协议(http,rtsp,rtmp,mms) AVI...

  • swift3语法(十八)

    协议 协议语法类、结构体或枚举都可以遵循协议在协议中定义类属性、方法的时候,总是使用 static 关键字作为前缀...

  • Swift中的错误处理

    1.Swift中的错误处理方式 Swift中错误用符合Error协议的类型表示。一般是枚举enum或者结构体str...

网友评论

    本文标题:结构体在协议处理中的妙用

    本文链接:https://www.haomeiwen.com/subject/xxclbxtx.html