У меня есть вложенная структура определяется следующим образом:Вложенные структуры в C говоря «предупреждение: сравнение между указателем и целое»
/* Buffering incoming CAN messages */
union CANDATA // Unionize for easier cooperation amongst types
{
unsigned long long ull;
signed long long sll;
u32 ui[2];
u16 us[4];
u8 uc[8];
u8 u8[8];
s32 si[2];
s16 ss[4];
s8 sc[8];
};
struct CANRCVBUF // Combine CAN msg ID and data fields
{ // offset name: verbose desciption
u32 id; // 0x00 CAN_TIxR: mailbox receive register ID p 662
u32 dlc; // 0x04 CAN_TDTxR: time & length p 660
union CANDATA cd; // 0x08,0x0C CAN_TDLxR,CAN_TDLxR: Data payload (low, high)
};
struct CANRCVTIMBUF // CAN data plus timer ticks
{
union LL_L_S U; // Linux time, offset, in 1/64th ticks
struct CANRCVBUF R; // CAN data
};
Моя переменная объявленная следующим образом:
static struct CANRCVTIMBUF* pfifo1; // Pointer to CAN driver buffer for incoming CAN msgs, high priority
Я думаю, Я обволакиваю то, что происходит с указателями здесь, но я пытаюсь получить доступ к значению id pfifo1:
if(&pfifo1->R.id == 0x44200000) { // Message to toggle blue led
toggle_led(15);
}
Это дает мне предупреждение warning: comparison between pointer and integer
для этой строки. Моя мысль заключалась в том, что &pfifo1->R
доставит мне структуру CANRCVBUF
, из которой я могу получить доступ к идентификатору, используя .
... к сожалению, похоже, не так.