不多解释了。直接看代码:
有时内存不够用,对于只有0/1两种状态的变量,可以使用1个字节的8个位拆分使用。这样1个字节就可以控制8种状态,用&,|也可以比较,但是有更好用的方法。
位变量的使用
typedef union{
unsigned char byte;
struct{
unsigned char bit0:1;
unsigned char bit1:1;
unsigned char bit2:1;
unsigned char bit3:1;
unsigned char bit4:1;
unsigned char bit5:1;
unsigned char bit6:1;
unsigned char bit7:1;
}bits;
}flag;
flag Flag1;
#define var1 Flag1.bits.bit0
#define var2 Flag1.bits.bit1
#define rdir Flag1.bits.bit2
#define gdir Flag1.bits.bit3
#define bdir Flag1.bits.bit4
......
这样就可以直接使用var1=1 ;var2=0;了
位带操作,类似51单片机的单个引脚控制。
//== INPUT ===
//---- PA -----
#define PA_IN PA_IDR
_Bool PA1_IN @PA_IDR:1;
_Bool PA2_IN @PA_IDR:2;
_Bool PA3_IN @PA_IDR:3;
//== OUTPUT ===
//---- PA -----
#define PA_OUT PA_ODR
_Bool PA1_OUT @PA_ODR:1;
_Bool PA2_OUT @PA_ODR:2;
_Bool PA3_OUT @PA_ODR:3;
以此类推。