Я должен передать массив смешанного типа (объединение) из одного uController (источник) в другой uController (цель) через SPI, поэтому я должен перенести весь блок передачи в массив uint8_t перед передачей, а затем восстановить его вtarget uC обратно в массив объединения смешанного типа.
Я пробовал следующий подход, но он не работает.(Упрощенно)
int i;
int len=4;
union dummy{
float f32;
uint32_t u32;
uint8_t u8[4];
};
union dummy inst1[len]; //First instance on source uC
union dummy inst2[len]; //Second instance on target uC
inst1[0].u8[0]=73;
inst1[1].f32=17.5;
//... and so on
printf("Source: %d, %f\n",inst1[0].u8[0],inst1[1].f32);
//Prepare SPI uint8_t array
uint8_t spi_arr[4*len];
*spi_arr=*inst1; //Wrong. What to do here?
//SPI uint8_t array arrived on target. Convert it back to union type
*inst2=*spi_arr; //Wrong. What to do here?
printf("Target: %d, %f\n",inst2[0].u8[0],inst2[1].f32);
Это дает мне ошибку:
error: incompatible types when assigning to type 'uint8_t {aka unsigned char}' from type 'union dummy'
Все, что я хочу, это просто копировать содержимое массивов вперед и назад, как они есть.Как это сделать?