I'm working with an USART device that send to my MCU a series of different commands (also different is size) and I want to try the best way to parse the commands.
I defined two packed structure (one for each command)
typedef ccport_PACKED( struct TASK_CommandStandard
{
    UINT8  startByte;
    UINT16 length;
    UINT8  command;
    UINT16 crc16;
}) TASK_CommandStandard_t;
typedef ccport_PACKED( struct TASK_CommandExitBootloader
{
    UINT8  startByte;
    UINT16 length;
    UINT8  command;
    UINT8  reserved;
    UINT16 crc16;
}) TASK_CommandExitBootloader_t;
and one Union:
typedef union TASK_Command
{
    TASK_CommandStandard_t       standard;
    TASK_CommandExitBootloader_t exitbootloader;
} TASK_Command_t;
My application receives the USART command inside a UINT8 buffer and after that, looking into the 4th byte I can detect the type of the command (standard or exitbootloader).
To parse the command, my idea is to use one pointer TASK_Command_t *newCommand and based on the command code, assign the address of instance.rxFrameBuffer to:
newCommand->exitbootloader = (TASK_CommandExitBootloader_t *)instance.rxFrameBuffer
or
newCommand->standard = (TASK_CommandStandard_t *)instance.rxFrameBuffer
This is my function:
static void TASK_FSM_FrameReceived( void )
{
    UINT8                   commandCode;
    TASK_Command_t          *newCommand;
    commandCode = instance.rxFrameBuffer[TASK_COMMAND_CODE_INDEX];
    if( commandCode == TASK_COMMAND_CODE_EXIT_BOOTLOADER )
    {
        newCommand->exitbootloader = (TASK_CommandExitBootloader_t *)instance.rxFrameBuffer;
    }
    else
    {
        newCommand->standard = (TASK_CommandStandard_t *)instance.rxFrameBuffer;
    }
    ......
}
Unfortunately, the compiler returns this error:
incompatible types when assigning to type 'TASK_CommandExitBootloader_t' {aka 'struct TASK_CommandExitBootloader'} from type 'TASK_CommandExitBootloader_t *' {aka 'struct TASK_CommandExitBootloader *'}
Can someone give me a hint?
 
     
     
    