新闻  |   论坛  |   博客  |   在线研讨会
关于bitfiled的
0750long | 2010-02-01 22:09:07    阅读:1418   发布文章

 

  前些日在VC下的一段代码需要移植到PPC上,利用codewarrior作为编译器,该部分程序主要涉及到一些位操作,而在这个过程中遇到一些小问题——VC下位域的位置与codewarrior下设定正好相反,如下: 

union{
uint8 bytes;
struct{
uint8 bit1 : 1; -- lsb in vc++6.0 & msb in cw for MPC55xx
...
uint8 bit7 : 1; -- msb in vc++6.0 & lsb in cw for MPC55xx }bits;
}Byte_tag;
  小查了下资料:
  cw for X12下位域以byte为单位分配,高于byte以每16位进行安排,最高32bits,每16位位序从上至下为msb->lsb
 
  对比cw for MPC55xx下,默认情况下16位、32位均为msb->lsb安排,另外位域可以通过“#pragma has8bytebitfields on”选项扩展到64bits;可以利用“#pragma reverse_bitfields on”将位序进行反转(ms X12下没有这个选项)。
  
  ms有些规律,至少和大小端、CPU总线位数感觉还是有点关系的,不过,对于“位域”操作,位域在存储的位置与编译器是相关,如果应用对于位域在字节/字中的位置敏感的话,那么这样的程序在移植的过程中可能会遇到麻烦,这样反而利用宏定义来完成“位”的操作显得实惠得多。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客