[问题] C用结构指标操作资料的问题

楼主: 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. 这样的作法(转型操作)是正确/常见的使用方式吗?
刚入行对转型跟结构还不太熟悉,希望各位前辈指导,非常感谢!
作者: james732 (好人超)   2018-12-13 21:31:00
sizeof()是compiler支援的而不是lib支援的吧?
作者: loveme00835 (发箍)   2018-12-14 01:40:00
C89 就有 sizeof “operator” 除非你穿越吧
楼主: amoumou (amoumou)   2018-12-14 08:07:00
谢谢指教!我马上去确认sizeof()是否能用测试过了,编译出现syntax error,无论是穿越或其他原因,现在我确实无法用sizeof()取得size第二题我想我有解答了,32位元不论哪种指标都是4bytes

Links booklink

Contact Us: admin [ a t ] ucptt.com