C语言位域结构体和共用体详解:MonitorWord_BITS & MonitorWord
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_BITS 和 MonitorWord 的组合使用,可以方便地存储和操作一些状态信息。通过位域结构体,可以紧凑地存储数据;通过共用体,可以提供不同的访问方式,方便修改和读取状态信息。
原文地址: https://www.cveoy.top/t/topic/nNyG 著作权归作者所有。请勿转载和采集!