I have to send UDP packets in a vehicle's LAN. The UDP packet consists of 5 fields:
field_1: 4 bytes uint32_t
field_2: 1 byte uint8_t
field_3: 1 byte uint8_t
field_3: 2 bytes uint16_t
field_4: 20 bytes 5*float
I wonder if doing memcpy in a buffer of chars is MISRA C compliant, the code is here:
uint32_t field_1 = 25;
uint8_t field_2 = 34;
uint8_t field_3 = 1;
uint16_t field_4 = 234;
float field_5[5] = {1,2,3,4,5};
/* Allocate memory for the buffer*/
int l_buffLen = sizeof(uint32_t)
+ sizeof(uint8_t)
+ sizeof(uint8_t)
+ sizeof(uint16_t)
+ 5*sizeof(float);
char buffer[l_buffLen];
/* Copy data to the buffer */
int idx = 0;
memcpy(&buffer[idx],&field_1,sizeof(uint32_t));
idx+=sizeof(uintt32_t);
memcpy(&buffer[idx],&field_2,sizeof(uint8_t));
idx+=sizeof(uint8_t);
memcpy(&buffer[idx],&field_3,sizeof(uint8_t));
idx+=sizeof(uint8_t);
memcpy(&buffer[idx],&field_4,sizeof(uint16_t));
idx += sizeof(uint16_t);
memcpy(&buffer[idx],field_5,sizeof(float)*5);