51用习惯了处处unsigned char然后造成了这种问题...
现在开始用下面的形式了: typedef struct { uint32 Bit_31 : 1; uint32 Bit_30 : 1; ...... uint32 Bit_0 : 1; }Flag_Type;
Flag_Type X_State;
感觉这样用的话也挺方便的...比如存进SRAM只需要: Write_Bytes( (uint8*)&X_State, sizeof(X_State) );
不过我今天硬件调试时从串口的反馈中看出了这样的问题所在: 我给X_State赋了初值: X_State = { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0 };
然后从结构体第一个字节(Bit_31~Bit_24这8个位段)开始按顺序发送至串口,得出以下结果: 0xF0 -- (uint8*)(&X_State + 0) 0x0F -- (uint8*)(&X_State + 1) 0x33 -- (uint8*)(&X_State + 2) 0x4C -- (uint8*)(&X_State + 3)
也就是字节不变,字节内的数据前后颠倒...难道C语言编译器都是这样的么?还是RealView来个别出心裁?又难道是我地址引用错误?... |