高科技C编译器位结构

时间:2013-03-11 16:09:31

标签: c struct

我在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位我没有这样声明。

我该如何纠正?

1 个答案:

答案 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);

然后根据需要替换值以查看编译器的位置。如果你需要与其他计算机/编译器进行通信,你可能最好使用面具并自行转移。