当前位置: 代码迷 >> 综合 >> C语言 联合体使用技巧之位带操作
  详细解决方案

C语言 联合体使用技巧之位带操作

热度:74   发布时间:2024-02-08 06:11:32.0

1.联合体union

当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。在C Programming Language 一书中对于联合体是这么描述的:

1)联合体是一个结构;

2)它的所有成员相对于基地址的偏移量都为0;

3)此结构空间要大到足够容纳最"宽"的成员;

4)其对齐方式要适合其中所有的成员;

具体使用方式如下,直接看代码:

typedef union SYSTEM_FAULT{uint16_t all;struct {uint16_t iuvp:  1;//输入欠压 (1代表占用1bit)uint16_t iovp:  1;//输入过压uint16_t iocp:  1;//输入过流uint16_t motp:  1;//功率模块过温uint16_t oovp:  1;//输出过流uint16_t oocp:  1;//输出过流uint16_t oopp:  1;//过功率故障uint16_t excu:  1;//电流采样零漂过大uint16_t cotp:  1;//CPU过温uint16_t ilrv:  1;//输入极性错误}bit;
}SYSTEM_FAULT_STRUCT;
volatile SYSTEM_FAULT_STRUCT gPSM_FAULT;gPSM_FAULT.bit.cotp = 1;if( gPSM_FAULT.all != 0 ) /*当bit里有一个状态更改为1,那么就执行下面操作*/
{/*这里面执行所需操作*/
}

这样子就很好的解决了需要在if里写多个或,需要同时判断多次的问题。只需要统一判断一个值,然后执行共同的操作。

  相关解决方案