打印

请问张先生,关于FSL 编译器位域的编译设置问题?

[复制链接]
2597|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jatkai|  楼主 | 2008-12-2 02:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
例如以下定义:
typedef union {
  byte Byte;
  struct {
    byte             :1; 
    byte             :1; 
    byte             :1; 
    byte             :1; 
    byte             :1; 
    byte STOPE       :1;                                       /* Stop Mode Enable */
    byte COPT        :1;                                       /* COP Watchdog Timeout */
    byte COPE        :1;                                       /* COP Watchdog Enable */
  } Bits;
} SOPTSTR;

编译器默认情况下编译结果:
COPE编译为SOPTSTR.Bits.(bit7)
COPT编译为SOPTSTR.Bits.(bit6)
这是默认的位域编译顺序即低位在前。
如今我要编译为高位在前:
COPE编译为SOPTSTR.Bits.(bit0)
COPT编译为SOPTSTR.Bits.(bit1)
请问除了在项目的Standart Setting中设置编译器选项之外(该处设置影响当前项目中所有源代码的编译)之外,能否通过在源文件中添加一些编译控制指令进行设置,如#pragma xxxx之类的?即能否通过添加编译控制指令只影响当前文件代码中与位域相关的编译结果??

请高手不吝赐教,谢谢!!!


相关帖子

沙发
张明峰| | 2008-12-2 09:45 | 只看该作者

好像没有这么做的

位域结构是一种特殊的数据类型,其高低位排列规则应该是要统一的。你随意更改高低顺序,就好比你要随意更改变量little-endian还是big-endian规则一样,这让编译器如何是好?在这样交叉混叠的编程思路下,你又准备如何管理你的项目?我还是感觉你有点走火入魔了。

使用特权

评论回复
板凳
ijk| | 2008-12-4 14:00 | 只看该作者

更改endian

  更改endian有时还是需要的:比如little-endian的CPU,用在big-endian的网络中;当然更改endian一般情况下不需要

使用特权

评论回复
地板
ayb_ice| | 2008-12-7 10:17 | 只看该作者

可以的

可以控制的,不过具体的控制我不大记得了,我以前看编译器手册时,上面有说到这些问题.不过建议还是使用默认的方法.

使用特权

评论回复
5
jatkai|  楼主 | 2008-12-19 14:04 | 只看该作者

kuxinshen,我也知道编译器设置可以,但他是全局设定,我要

某一源文件的编译参数。例如我有两个源文件file1.c和file2.c,我要file1的位域编译高位在先,要file2低位在先,不知行不行?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

36

帖子

0

粉丝