zoukankan      html  css  js  c++  java
  • c语言联合union的使用用途

    在使用联合的使用,我们通常用来判断大小端,但是其实不仅仅有这个用处。

    我在网上看到还有其他的用途:

    1、分离高低字节

    这个需要结合cpu大小端来判断,原文如下:

    这样的操作,而一个除法消耗四个机器周期,取余也需要进行一系列复杂的运算,如果在短时间内需要进行很多次这样的运算无疑会给程序带来巨大的负担。

    其实进行这些操作的时候我们需要的仅仅是高低字节的数据分离而已,这样利用联合体我们很容易降低这部分开销。

    联合体内数据是按地址对齐的。具体是高位数据还是低位数据要看平台的大小端模式,51是大端,stm32默认是小端,如果其他编译器还请自测。

    仅仅用了一条减法指令就达到了除法、取余的操作,在进行高频率定时时尤为有用。

    2、寄存器封装

    看看TI固件库中寄存器是怎么封装的:

     所有的寄存器被封装成联合体类型的变量,联合体里边的成员是一个32bit的整数及一个结构体,该结构体以位域的形式体现。这样就可以达到直接操控寄存器的某些位了。

    比如,我们要设置PA0引脚的GPAQSEL1寄存器的[1:0]两位都为1,则我们只操控两个bit就可以很方便的这么设置:

    GpioCtrlRegs.GPAQSEL1.bit.GPIO0 = 3

    或者直接操控整个寄存器:

    GpioCtrlRegs.GPAQSEL1.all |=0x03 

     

    以上就是关于联合体的一点总结笔记

  • 相关阅读:
    C#与SAP进行数据交互
    自动加减工单结存算法实现
    RDLC报表打印一维码
    调用存储过程通用类
    监听网络状态
    压缩及解压缩文件
    用Go造轮子-管理集群中的配置文件
    2015年总结
    浅析Go语言的Interface机制
    2014年总结
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12045166.html
Copyright © 2011-2022 走看看