我有一个这样定义的位字段(它来自微控制器库,所以看起来有点不同):
typedef union {
byte Byte;
struct {
byte PTAD0 :1;
byte PTAD1 :1;
byte PTAD2 :1;
byte PTAD3 :1;
byte PTAD4 :1;
byte PTAD5 :1;
byte :1;
byte :1;
} Bits;
} PTADSTR;
extern volatile PTADSTR _PTAD @0x00000000;
#define PTAD _PTAD.Byte
#define PTAD_PTAD0 _PTAD.Bits.PTAD0
#define PTAD_PTAD1 _PTAD.Bits.PTAD1
#define PTAD_PTAD2 _PTAD.Bits.PTAD2
#define PTAD_PTAD3 _PTAD.Bits.PTAD3
#define PTAD_PTAD4 _PTAD.Bits.PTAD4
#define PTAD_PTAD5 _PTAD.Bits.PTAD5
所以。假设我想要一个设置一点的函数,如下所示:
void setbit(bit Bit) {
Bit = 1;
}
当然,“位”声明不起作用。我想要一个可以使用的声明
setbit(PTAD_PTAD5)
它会设置这个位。我可以
void setbit(byte Byte, byte number) {
Byte |= 1<<(number);
}
并且寄出
setbit(PTAD,5);
效果很好,但是……这不是我想要的,因为我想做一些像 Arduino 的库之类的东西。任何人都知道如何以我喜欢的方式做到这一点?