页面版权所有©ob欧宝最新地址 地址:浙江省湖州市创业大道111号 123黔ICP备17003352号-3

网站地图杭州

C语言:结构体、联合体嵌套使用的实用操作
产品名称

C语言:结构体、联合体嵌套使用的实用操作

没有此类产品
项目详细介绍

  结构体、联合体是C语言中的构造类型,结构体我们平时应该都用得很多。但是,对于联合体,一些初学的朋友可能用得并不多,甚至感到陌生。我们先简单看一下联合体:

  成员表中含有若干成员,成员的一般形式为:类型说明符 成员名。其占用的字节数与成员中最大数据类型占用的字节数。

  在进行数据组包的时候,先给data_pkg_type进行赋值,确定数据包的类型,再给对应的union里的结构体进行赋值;在进行数据解析的时候,通过data_pkg_type来选择解析哪一组数据。

  思考一下,如果在union里面再嵌套一层union会怎么样?会变得更复杂?以前的话,我会觉得越嵌套会越复杂,我也很抵制这种不断嵌套的做法。但后来看了我同事鱼鹰(公众号:鱼鹰谈单片机)的设计之后,我惊呆了!这可太秀了,他就是这么嵌套使用把原本复杂的系统数据管理得明明白白的。我们看他怎么设计的(看个大概的图):

  可以看到最左边和最右边这就建立起了一一对应关系,我们的模块很多,数据很多,但是在这样的设计中显得很清晰、很容易维护。

  所有的寄存器被封装成联合体类型的,联合体里边的成员是一个32bit的整数及一个结构体,该结构体以位域的形式体现。这样就可以达到直接操控寄存器的某些位了。比如,我们要设置PA0引脚的GPAQSEL1寄存器的[1:0]两位都为1,则我们只操控两个bit就可以很方便的这么设置:

  如果不是工作于芯片原厂,寄存器的封装应该离我们很远。但我们可以学习使用这种方法,然后用于我们的实际应用开发中。

  之前记得群里有一位小伙伴问系统有几十个状态变量需要管理,怎么做比较好。如上例子就是比较好的一种管理方法。

  这其实也就是上一篇文章《面试题 获取整数各个字节》介绍的。在数据组合与拆分之前首先需要确实当前平台的大小端。比如小编使用的平台是小端模式。

  但是数据组合与拆分有更好的方法:移位操作。篇幅有限不再贴出代码,详细代码可参考:《面试题 获取整数各个字节》、《C语言、嵌入式位操作精华技巧大汇总》两篇文章。

  这种应用得很广泛,用于自定义通信协议。struct里面的内容可以设计得很简单,比如全是有用的数据,或是设计得很复杂,包含一些协议头尾、包长、有效数据、校验等内容。

  但无论如何,我们组包发送的过程是填充结构体->

  发送data_buffer;反之接收数据解析的过程就是接收数据存于data_buffer->

  使用结构体数据。我们之前分享的《干货 protobuf-c之嵌入式平台使用》也是这个思路。

  类似的,使用这样子的方法可以用于传输浮点数,更具体地不再展开,网络上有很多这一块的资料。感兴趣的朋友可以自己操作验证验证。

  文章出处:【微信号:gh_c472c2199c88,微信公众号:5G网通信】欢迎添加关注!文章转载请注明出处。

  携手电子发烧友企业号Beta版上线,飞凌嵌入式在电子发烧友企业号正式入驻啦! 保定飞凌嵌入式技术有限....

  详解变频器、逆变器工作原理凡亿PCB今天以下文章来源于嵌入式专栏 ,作者strongerHuang关注+星标公众号,不错过...

  本例程使用的是倍福嵌入式控制器CX5120-0125。变频器使用博能传动公司A1系列驱动器,支持EtherCAT通信。继续上一篇博文《...

  前 言本文主要介绍i.MX 8M Mini基于FlexSPI、PCIe与FPGA的高速通信案例。本文....

  wiringOP 已适配 Orange Pi Zero Plus开发板,使用 wiringOP 可以测试 GPIO、I2C、UART 和 SPI 的功能。 ...

  前面文章《不要再找啦,关于Cortex-Mx芯片的启动没有比这里更清楚啦》对STM32单片机的启动流程以及main函数的执行做了一个详...

  开头的话 嵌入式开发是一个比较苦、容易背锅、可能仍然需要996而且拿钱较少,但也有些许乐趣的活,我一....

  NEWS 随着客户需求升级,电子产业供应链缺乏弹性、流量愈发昂贵、品类同质化等问题的凸显,对....

  飞凌i.MX8MP核心板处理器内部集成2.3TOPS算力(每秒兆级操作)的高性能NPU。 通过将高性....

  飞凌嵌入式FETT507-C核心板基于全志T507四核车规级处理器设计开发,可满足智能加油机的所有功....

  以智慧能源管理平台等辅助管理手段提高能源利用效率,实现节能减排,其中能耗在线监测平台无疑是投入少,性....

  本文硬件平台采用全志T507四核车规级处理器设计开发板,本文讲解T507开发板以太网配置方法。其它板....

  飞凌嵌入式FETT507-C核心板集成全志T507四核车规级处理器设计开发,Cortex-A53架构....

  5G 改变社会,电力点亮未来。5G如何赋能智慧电网?应用场景有哪些? 保定飞凌嵌入式技术有限公司,....

  OTA升级是Android系统所提供的标准软件升级方式。它功能十分强大,并且提供了完全升级(完整包)....

  FCU1104工业网关与各类的传感器相连,对传感器的数据进行实时采集,通过LED屏幕将数据实时显示,....

  飞凌嵌入式最新产品FCU1104嵌入式控制单元正式发售!该平台采用了NXP超高效、高性能、低成本的i....

  干货 飞凌OK1028A-C如何输出PWM方波? 最近,我收到了一个使用OK1028A-C输出....

  OKMX8MPQ-C开发板采用NXPi.MX8MPlus高性能处理器开发,内置NPU、ISP,AI计....

  i.MX8MPlus系列专注于机器学习和视觉、高级多媒体以及具有高可靠性的工业自动化。它旨在满足智慧....

  关键词:RISC-V处理器 ,平头哥玄铁CPU,RISC-V指令集,IoT芯片,Vector,SIMD技术 什么是向量计算技术?什...

  关键词:IoT,YoC、AliOS、集成开发环境、YoC基础软件平台、组件积木化,RISC-V OS, RISC-V操作系统,YoC...

  关键词:集成开发环境、剑池CDK ,RISC-V,IDE,调试,编译,软件模拟,集成开发环境,GCC,LLVM,GDB,QEM...

  关键词:RISC-V,编译,软件模拟,调试系统,平头哥玄铁CPU、调试工具,集成开发环境、GDB,剑池CDK,IDE, 引...

  关键词:RISC-V、集成开发环境、剑池CDK、调试、编译、软件模拟GCC,LLVM,GDB,QEMU,MDK ,IAR ,ECL...

  关键词:RISC-V生态芯片,RVB2601、玄铁E906、RISC-V开发板、上手好用、用户指南,IoT芯片,AliOS Things,...

  OKMX8MM-C是飞凌基于NXP公司i.MX8M Mini 四核64位处理器所设计的一款开发板,主....

  电子AI后视镜终端产品可借助飞凌FETT507-C核心板实现,该核心板基于全志T507四核车规级处理....

  2019年3月,我国交通部发布了JT/T 1178.2,即《营运货车安全技术条例 第2部分:牵引车辆....

  在嵌入式系统中,对内存地址的操作是一个重要的方面,从广义上讲,嵌入式系统的地址空间可以分成以下三种类....

  C语言是一种高级语言,在大多数情况下C语言的代码是和具体的处理器体系结构无关的。然而,在嵌入式系统的....

  随着近些年来嵌入式工控机在行业当中的应用成熟起来,在一些行业或者是领域的当中已经取代一些传统的工控机....

  很多学习嵌入式的新人、工程师,在学习到半途中,总会感觉到迷茫,不知道自己从哪方面入手、进阶,也不知道....

  ThingMagic Nano是Mercury系列嵌入式UHF RAIN RFID模块中最小的产品。....

  Microchip的SA65型芯片级原子钟是一款嵌入式计时解决方案,具有更好的环境适应性,与之前的S....

  凡是从事信息技术相关工作的童鞋,一定都听说过嵌入式和单片机。 大家都知道,这两个名词,和硬件系统有着....

  嵌入式工控机是一种加固的增强型工业计算机,它可以作为一个工业控制器在工业环境中可靠运行,嵌入式工控机....

  本期上海研强给大家分享的是嵌入式工控机在智慧停车场的应用,希望看完本篇文章您能对嵌入式工控机有一个全....

  本期上海研强给大家分享的是嵌入式工控机在人工智能产业的应用,希望看完本篇文章您能对嵌入式工控机有....

  之前写过一篇《如何设计一个C++的类》,今天这里继续聊聊如何设计结构体,注意本文不介绍在C++中结构....

  贸泽分销的NXP i.MX RT106S处理器是EdgeVerse™边缘计算平台中的一款产品。该处....

  凭借可根据各类数据源(如摄像头输入)做出决策的边缘设备,用户能够将重要数据保存在本地网络中。这减少了....

  系统移植前说明 关于命令行提示符 : 在实验步骤中会涉及到执行命令的操作,为区分操作是在Ubuntu....

  程序员可能无意识的传递了错误参数;外界的强干扰可能将传递的参数修改掉,或者使用随机参数意外的调用函数....

  近20年来,智能手机成为了对我们影响最大的电子产品。现在的手机承载了越来越多的功能,可以说,如今出门....

  本期上海研强给大家分享的是工控机助力智能制造快速发展,希望看完本篇文章您能对工控机有一个全新的认识!

  摘要 本篇笔记主要记录在恩智浦MPC5744P上基于MBD工具箱的开发准备工作,即工具箱的安装和初级....

  “5G+工业互联网”将发挥基础性作用。当前,工业网络无线化发展趋势显著,国际电信联盟定义的5G三大技....

  关于5G在工业自动化应用的话题已热议多年,与前几代移动技术相比,5G的速度更快、时延更低,范围内可连....

  API设计 可以把一个模块看成是黑盒,给定一个输入,就会返回确定的结果,或者执行确定的功能, 模块之....

未找到相应参数组,请于后台属性模板中添加
暂未实现,敬请期待
暂未实现,敬请期待
上一篇:C语言中的位域是什么? 下一篇:结合STM32单片来讲讲结构体的运用