struct paylaod_t { uint8_t len; enum commands_t command; uint8_t data[USB_RX_LEN-2]; }; extern volatile uint8_t *usb_rx; int main(void) { int16_t i; volatile struct payload_t *payload = (volatile struct payload_t*) usb_rx; ..... .... switch(payload->command) { <-- dereferencing pointer to incomplete type