楼主:
amoumou (amoumou)
2018-12-13 21:21:28开发平台(Platform):
我是在32Bit Renesas MCU上实作
我想要用结构指标来操作资料例如:
// MSB bit7 - bit0 LSB
// 要用来操作的结构
typedef struct
{
uint8_t JoystickUpStatus:1;
uint8_t JoyStickLeftStatus:1;
uint8_t JoyStickRightStatus:1;
uint8_t JoyStickDownStatus:1;
uint8_t Pending1:4;
uint16_t TimeCounter1:12;
uint8_t Pending2:4
uint16_t SpeedValue:16;
uint8_t XStatus:2;
uint8_t YStatus:2;
uint8_t Pending3:2;
uint16_t TimeCounter2:10;
uint8_t Pending4:8;
}MY_DAT_STRUCT; //8 bytes, 64bit total
uint64_t TX_DATA = 0xF0CCF03FFE000008; //通常资料一次送8 bytes出去
MY_DAT_STRUCT *my_dat_struct = (MY_DAT_STRUCT *)&TX_DATA;
//以下为预期结果
my_dat_struct->JoystickDownStatus 数值为 1;
my_dat_struct->SpeedValue 数值为 0x3FFE;
my_dat_struct->TimeCounter2 数值为 0xCCC;
实际跑出来结果跟预期相符。
这样做的目的是希望增加程式的可读性,能明确的知道哪些bit是做什么用的;
在读取的时候也能快速的取出要的数值。
我想问的问题是(我的lib中没有sizeof()可以用):
1. 若我宣告 MY_DAT_STRUCT my_dat; my_dat的size会是连续的64bits吗?
2. 承上,若宣告为 *my_dat; 那么size应该会是多少?
2. TX_DATA透过转型成结构指标操作的话,会不会有潜在的问题(例如没对齐)?
3. 这样的作法(转型操作)是正确/常见的使用方式吗?
刚入行对转型跟结构还不太熟悉,希望各位前辈指导,非常感谢!