我在PIC控制器上使用带有Hi-Tech C编译器的MPLAB X IDE。 因此,重要的是一点点“字节导向”。 所以我尝试以下方法:
volatile struct{
unsigned bit white:1;
unsigned bit red:1;
unsigned bit blue:1;
unsigned bit green:1;
unsigned bit violett:1;//Magenta
unsigned bit yellow:1;
}ColorPick;
现在我不确定它是否被正确声明,当我放弃一些Bit-Shifting时会发生什么。 在我的结果中,它应该只有一位aktive(1)和所有其他低(0)。
“白色是0b00000001还是0b10000000? 当我将它移动6次时,我会变黄。之后再次变白了。 我可以在ColorPick<<<<<<<<< 1; ?
我想1会转移到第7位和第8位我没有这样声明。
我该如何纠正?
答案 0 :(得分:0)
从Hi-Tech C用户手册,第346页:
A.9.4 int(6.5.2.1)
中位域分配的顺序结构中定义的第一个位字段分配最少 存储单元中的有效位位置。后续的位字段 被分配了高阶位。
根据文档,我认为bit
不是编译器中的关键字。
根据我的经验,位域依赖于编译器。我确定位对齐的方法是编写一个执行类似命令的小命令行程序:
union test_u {
struct test_s {
unsigned long bwhite : 1;
unsigned long bred : 1;
unsigned long bblue : 1;
unsigned long bgreen : 1;
unsigned long bviolet : 1;
unsigned long byellow : 1;
unsigned long bpink : 1;
} bits;
unsigned long unlong;
} bitest;
bitest.unlong = 0;
bitest.bred = 1;
printf("0x%8.8X\n", bitest.unlong);
然后根据需要替换值以查看编译器的位置。如果你需要与其他计算机/编译器进行通信,你可能最好使用面具并自行转移。