【发布时间】:2012-10-08 09:04:30
【问题描述】:
我正在尝试将变量映射到来自不同端口的 IO。我能找到的最接近的例子是:
union {
struct
{ // specify each bit in this char byte
unsigned bit0:1 ; // name each member and size
unsigned bit1:1 ;
unsigned bit2:1 ;
unsigned bit3:1 ;
unsigned bit4to6:3 ; // example set to 3 bits
unsigned bit7:1 ;
};
unsigned char allbits; // overall type of union
} Flag ; // name of union = Flag
Flag.allbits = 0x12; // sets value of union/bits to 0x12
Flag. bit2 = 0; // clear the if (Flag. bit2==1), etc
if (Flag. bit2 == 1) etc
是否有可能让 bit0、bit1、bit2 等具有来自不同端口的 IO 位?像这样的:
union {
struct
{ // specify each bit in this char byte
LATAbits.LATA5:1 ; // name each member and size
LATAbits.LATA7:1 ;
LATBbits.LATB2:1 ;
LATBbits.LATB4:1 ;
LATBbits.LATB5:1 ;
LATCbits.LATC0:1 ;
LATCbits.LATC1:1 ;
LATCbits.LATC2:1 ;
};
unsigned char allbits; // overall type of union
} Flag ; // name of union = Flag
Flag.allbits = 0x12; // sets value of union/bits to 0x12
对我来说重要的是能够设置整个联合的值,而不一定要访问单个位。
【问题讨论】:
-
如果您在谈论 C 编程语言,您可能需要添加 C 标签。
-
位域只能是整数类型。我认为您的实施没有问题。尝试将您的结构命名为
LATCbits以便能够像那样访问它们。 -
我的实现它不起作用。我得到所有位域的“意外令牌”。我正在使用 Microchip 的 C32 和 MPLABX。我认为正确的方法是第一个示例中的位域应该与我的 IO 位相关,但我不知道该怎么做。
标签: c variables mapping microcontroller