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里写多个或,需要同时判断多次的问题。只需要统一判断一个值,然后执行共同的操作。