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) (bit0)
uint16_t iovp: 1;//输入过压 (bit1)
uint16_t iocp: 1;//输入过流 (bit2)
uint16_t motp: 1;//功率模块过温 (bit3)
uint16_t oovp: 1;//输出过流 (bit4)
uint16_t oocp: 1;//输出过流 (bit5)
uint16_t oopp: 1;//过功率故障 (bit6)
uint16_t excu: 1;//电流采样零漂过大 (bit7)
uint16_t cotp: 1;//CPU过温 (bit8)
uint16_t ilrv: 1;//输入极性错误 (bit9)
}bit;
}SYSTEM_FAULT_STRUCT;
volatile SYSTEM_FAULT_STRUCT gPSM_FAULT;
gPSM_FAULT.bit.cotp = 1;
if( gPSM_FAULT.all != 0 ) /*当bit里有一个状态更改为1,那么就执行下面操作*/
{
/*这里面执行所需操作*/
}
这样子就很好的解决了需要在if里写多个或,需要同时判断多次的问题。只需要统一判断一个值,然后执行共同的操作。