作者:瑞生,来源:科技老顽童微信公众号:芯片之家(ID:chiphome-dy)C语言的结构体和共用体,往往在单片机应用开发中被忽视。如果能够用起来,不仅能够极大的提高单片机的运行效率,还可能解决一些看起来无法解决的问题。现在,给大家举一个例子:单片机串口需要接收并处理大量数据的情况。示例:单片机甲要与某个设备乙通信,它们采用串口连接,设备乙会给单片机甲发送串口数据,数据一共有46个字节,其中前8个字节表示命令,后8个字节表示设备信息,中间30个字节表示有效数据。普通的程序代码,会进行如下变量定义:

unsigned char rec_buf[46]; // 定义接收缓存unsigned char command[8]; // 定义命令变量unsigned char valid_data[30]; // 定义有效数据变量unsigned char device_info[8]; // 定义器件信息变量

在串口中断函数中,使用rec_buf接收串口数据。此处省略接收代码,自行脑补。接收完毕后,再使用如下代码把对应的变量取出来。

//取出命令for(i=0;i<8;i++){  command[i]=rec_buf[i];}//取出有效数据for(i=8;i<38;i++){  valid_data[i-8]=rec_buf[i];}//取出器件信息for(i=38;i<46;i++){  device_info[i-38]=rec_buf[i];}

取出来之后,就可以在程序中使用了,比如,判断接收到的是什么命令,如下代码所示:

if(command[0]==0x88) // 如果是修改参数命令{  if(command[1]==0x33)// 如果修改的是IP地址参数  {    // 就怎么怎么样...  }  ...}

好!上面是普通的用法,接下来,我们使用结构体和共用体!

union{  rec_buf[46];  struct  {    unsigned char command[8];    unsigned char valid_data[30];    unsigned char device_info[8];  }ComInfo;}D_buf;

上面代码中,我们使用了共用体和结构体的方法定义了串口接收缓存和串口命令、有效数据和器件信息变量。当我们在串口中断中接收完数据后。就可以直接使用这些变量了。例如:

if(D_buf.ComInfo.command[0]==0x88) // 如果是修改参数命令{  if(D_buf.ComInfo.command[1]==0x33)// 如果修改的是IP地址参数  {    // 就怎么怎么样...  }  ...}

下面,我解释一下代码。共用体的特点:内部的变量使用同一个首地址。在我们定义的共用体里面,有两个变量,一个是rec_buf,一个是ComInfo,所以,它俩的内存首地址是相同的。结构体的特点:内部的变量地址自增。在我们定义的结构体ComInfo中,command变量、valid_data变量、device_info变量使用同一片内存空间,地址连续。基于以上共用体和结构体的特点,当我们接收完rec_buf以后,其实,数据就已经在结构体中的这3个变量中了,直接用就可以,省去了前面示例中“取出来”的环节。推荐阅读

  电子漫画系列,更新九张图片。

 【最强干货】618个3D封装免费分享

 【干货第二波】一大波3D封装免费分享

  贴片电容国内外品牌

  DC-DC电源芯片国内外品牌大汇总

  几毛钱的32768晶振,这也能写出一篇干货?

  车牌识别控制板原理图+PCB+3D齐全无私分享

 【视觉盛宴】你没见过的电子元器件的另一面!

  完全由C编写,高度可移植,超级牛逼的菜单架构!

  软件神器TortoiseGit,晓宇姐姐教你使用图形化方式管理单片机程序版本!

请戳右下角,给我一点在看!

串口 浮点数 结构体_quot;结构体quot;和quot;共用体quot;在单片机中的妙用相关推荐

  1. c语言结构共用体的作用,浅谈C语言共用体和与结构体的区别

    共用体与结构体的区别 共用体: 使用union 关键字 共用体内存长度是内部最长的数据类型的长度. 共用体的地址和内部各成员变量的地址都是同一个地址 结构体大小: 结构体内部的成员,大小等于最后一个成 ...

  2. 字符串类型、结构体、共用体、枚举、container宏、内存来源

    一.C语言的字符串类型 1.C语言没有原生字符串类型 很多高级语言像java.C#等就有字符串类型,有个String来表示字符串,用法和int这些很像,可以String s1 = "linu ...

  3. 【零基础学C语言】知识总结八:struct 结构体与 union 共用体

    struct 结构体 struct即结构体,C程序中经常需要用相关的不同类型的数据来描述一个数据对象.例如,描述学生的综合信息时,需要使用学生的学号.姓名.性别等不同类型的数据时,像这种数据类型总是在 ...

  4. 第九章 结构体与共用体

    C程序设计实验报告 姓名:欧阳思健 实验地点: 514实验室 实验时间:2019年6月26日 实验项目: 9.3.1 结构体变量的应用 9.3.2 结构体数组的应用 9.3.3 共用体的应用 9.3. ...

  5. 结构体与共用体(联合体)

    参考:结构体与共用体 作者:一只青木呀 发布时间: 2020-08-09 08:29:22 网址:https://blog.csdn.net/weixin_45309916/article/detai ...

  6. java jni 结构体_JNI基础 -- C++基础知识(结构体共用体 )

    结构体 类似于Java中的Bean对象,可以将一些变量封装为一个结构体 声明结构体的关键字是struct,也可以通过typedef别名定义 举个栗子: struct Student { //不同的数据 ...

  7. 【C语言】结构体、共用体、位域

    结构体 1. 结构体的声明方法 struct struct_name {data_type member1;data_type member2;.. }; 这是其中一种声明方式~ 2.定义一个结构体变 ...

  8. C语言——结构体、共用体

    结构体.共用体 1.结构体 基础知识 代码基本写法 内存对齐 2. 共用体 引论 定义 基础写法 共用体大小 1.结构体 基础知识 类似于Java中的javaBean,可以将一些变量封装成一些对象.同 ...

  9. 你真的了解结构体和共用体吗?

    目录 结构体 1.为什么需要结构体 2.定义结构体 3.结构体变量的初始化 4.结构体变量的输出 5.结构体变量的输入 6.结构体变量之间的赋值 7.结构体数组 8.结构体指针 9.结构体指针作为函数 ...

  10. c语言指针变量输出不了共用体,瘋子C语言札记(结构体/共用体/枚举篇)

    瘋子C语言笔记(结构体/共用体/枚举篇) (一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student ...

最新文章

  1. 网页中如何显示版权符号
  2. 软件开发基本原则(一)—— 策略和因素 (转)
  3. 解决Debian安装后中文乱码
  4. SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(工具部署)
  5. .net 识别一维码_天若OCR文字识别 v5.0 原创好用的OCR及翻译小工具
  6. CentOS7.6上搭建阿里云OSS的C SDK
  7. 信息安全工程师教程学习笔记汇总(思维导图及考试要点)
  8. 招商银行/招银网络科技面经、答案
  9. dbv oracle驱动,oracle dbv使用详解
  10. 破解钉钉旧版本强制更新(实现旧版本登录)
  11. 数据分析团队的搭建与思考
  12. 计算机术语root,root是什么意思
  13. 自学编程80余年,这些私藏的实用工具学习网站陪我走到了现在,必须收藏,学习效率翻倍 - 网站篇
  14. 【基于时间特征交互和引导细化的遥感变化检测 】2022TGRS
  15. 四色原型的学习心得分享
  16. 转载:解决 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passw
  17. 基于SPRINGBOOT果多多水果电商平台
  18. 城市矢量路网获取以及根据此数据制作点数据
  19. win7 mac 时间不一致
  20. config.guess 更新

热门文章

  1. java批量导入功能,java使用POI批量导入excel数据的方法
  2. python str 索引_一步一步学Python3(小学生也适用) 第九篇: 字符串(str)类型(中)...
  3. L2-003 月饼 (25 point(s))
  4. html语言format,HTML 文本格式化
  5. sublime能编译PHP吗,让sublime编译php、js
  6. JSP教程第6讲笔记
  7. libSM.so.6: cannot open shared object file: No such file or directoryapt-file search libSM.so.6
  8. 分类器对未见过类别的识别问题
  9. Caffe傻瓜系列(4):其它常用层及参数
  10. python实现的个人税后工资计算器