Part Number:SM470R1B1M-HT
对于同一个工程,同一个位域结构体,编译器却有两种矛盾的解析,具体代码示例如下:
一、位域结构体定义
typedef volatile struct
{
UBYTE rsv_ccr[3];
union
{
UBYTE ccr_UB;
struct
{
UBYTE CharLength_B3 : 3;//bit0~bit2
UBYTE Mode_B1 : 1;//bit3
UBYTE Async_B1 : 1;
UBYTE ParityEN_B1 : 1;
UBYTE Parity_B1 : 1;
UBYTE Stop_B1 : 1;//bit7
} ccr_ST;
} ccr_UN;
。。。
} SCI_ST;
定义一个SCI_ST类型的指针:SCI_ST *Sci_PST = &SCI1;
二、主函数main有C语言操作指令
Sci_PST->ccr_UN.ccr_ST.CharLength_B3 = 7;
三、初始化函数内有C语言操作指令
Sci_PST->ccr_UN.ccr_ST.CharLength_B3 = 7;
四、主函数和初始化函数内编译的结果有矛盾
主函数内汇编实现
初始化函数内汇编实现
五、矛盾点在于
主函数认为位域成员“CharLength_B3”存放于低3位;
初始化函数认为位域成员“CharLength_B3”存放于高3位;
特请教各位,上述矛盾是怎么来的,如何解决?
Cherry Zhou:
您好,我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!