使用IAR编译器,可以定义匿名联合,如下所示:
typedef struct
{
unsigned char no0:1;
unsigned char no1:1;
unsigned char no2:1;
unsigned char no3:1;
unsigned char no4:1;
unsigned char no5:1;
unsigned char no6:1;
unsigned char no7:1;
} __BITS8;
__saddr __no_init volatile union
{
unsigned char P0;
__BITS8 P0_bit;
} @ 0xFFF00;
并且可以直接访问P0或P0_bit:
P0 = 0x80;
由于它们具有相同的地址,因此会更改另一个变量:
P0_bit.no7 == 1 // returns true
我的问题是,如果在GCC中有这样的可能性,但是没有绝对寻址,基本上我只需要有两个变量P0和P0_bit共享同一个地址。
1条答案
按热度按时间gkn4icbw1#
我认为你所寻求的可以这样实现:
这里的位序列和字节是在一个联合体中,所以它们仍然占用相同的内存。注意,这个例子没有使用任何
typedef
'ing,也没有定义任何结构或联合体类型名。如果你愿意,你仍然可以这样做。附言:你不应该在你的
typedef
中使用__BITS8
作为名字;这是一个保留的标识符。