C语言位域结构体和共用体详解:MonitorWord_BITS & MonitorWord

这段代码定义了一个位域结构体类型 MonitorWord_BITS 和一个共用体类型 MonitorWord,用于表示一些状态信息。

1. 位域结构体 MonitorWord_BITS

typedef struct
{
    uint16_t  OutsideRelay :1; // 使用1位(bit)来表示外部继电器状态,占用1位(bit)内存空间
    uint16_t  InvWork :2; // 使用2位(bit)来表示逆变器工作状态,占用2位(bit)内存空间
    uint16_t  InvWorkFinal :2;   // 0: 等待 1: 离网  2: 并网,使用2位(bit)来表示逆变器最终工作状态,占用2位(bit)内存空间

    uint16_t RelayGpioEnable :1; // 使用1位(bit)来表示继电器GPIO是否可用,占用1位(bit)内存空间

    uint16_t   rev  :10; // 使用10位(bit)来表示保留位,占用10位(bit)内存空间

}MonitorWord_BITS; // 定义一个名为MonitorWord_BITS的位域结构体类型
  • MonitorWord_BITS 包含了5个成员变量,分别表示外部继电器状态、逆变器工作状态、逆变器最终工作状态、继电器GPIO是否可用和保留位。
  • 每个成员变量占用不同的bit位,例如 OutsideRelay 占用1位,InvWork 占用2位。
  • 利用位域结构体,可以更紧凑地存储数据,节省内存空间。

2. 共用体 MonitorWord

typedef union
{
    uint16_t          all; // 共用体包含一个16位整型变量all
    MonitorWord_BITS        bit; // 共用体包含一个MonitorWord_BITS类型的位域结构体变量bit
}MonitorWord; // 定义一个名为MonitorWord的共用体类型
  • MonitorWord 包含一个16位整型变量 all 和一个 MonitorWord_BITS 类型的位域结构体变量 bit
  • 共用体成员共享同一块内存空间,因此可以通过修改 all 变量或 bit 变量的成员来修改状态信息。
  • 例如,可以通过修改 MonitorWord.bit.OutsideRelay 来改变外部继电器状态,也可以通过修改 MonitorWord.all 来直接修改所有状态信息。

总结

MonitorWord_BITSMonitorWord 的组合使用,可以方便地存储和操作一些状态信息。通过位域结构体,可以紧凑地存储数据;通过共用体,可以提供不同的访问方式,方便修改和读取状态信息。

C语言位域结构体和共用体详解:MonitorWord_BITS & MonitorWord

原文地址: https://www.cveoy.top/t/topic/nNyG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录