Estoy intentando copiar los miembros de una estructura que contiene una mezcla de ints, char's y matrices de caracteres en una matriz de bytes para enviar a una línea serie. Hasta ahora tengotratando de copiar miembros de la estructura a la matriz de bytes en c
struct msg_on_send
{
char descriptor_msg[5];
int address;
char space;
char cmdmsg[5];
char CR;
char LF;
};
void switch_output_on()
{
int member;
struct msg_on_send SendMsg_on[sizeof member] =
{
};
unsigned char buffer [ sizeof SendMsg_on[0] ];
showbytes(buffer, serialize(buffer, SendMsg_on));
}
/***************************************************************************
* Function: ArrayBuild *
* Purpose: Uses memcopy to transfer the struct members sequentially *
* into an array of char *
* Arguments: *
* Returns: size_t i = a count of the number of bytes in the array *
***************************************************************************/
size_t ArrayBuild(unsigned char *dst, const struct msg_on_send *object)
{
size_t i = 0;
memcpy(&dst[i], &object->descriptor_msg, sizeof object->descriptor_msg);
i += sizeof object->descriptor_msg;
memcpy(&dst[i], &object->address, sizeof object->address);
i += sizeof object->address;
memcpy(&dst[i], &object->space, sizeof object->space);
i += sizeof object->space;
memcpy(&dst[i], &object->cmdmsg, sizeof object->cmdmsg);
i += sizeof object->cmdmsg;
memcpy(&dst[i], &object->CR, sizeof object->CR);
i += sizeof object->CR;
memcpy(&dst[i], &object->LF, sizeof object->LF);
i += sizeof object->LF;
return i;
}
/***********************************************************************
* Function: USARTWrite *
* Purpose: Writes the array data to the USART data register *
* Arguments: void *object = struct member *
* size_t size = size of array remaining *
* Returns: None *
***********************************************************************/
void USARTWrite(const void *object, size_t size)
{
const unsigned char *byte;
for (byte = object; size--; ++byte)
{
printf("%02X", *byte);
}
putchar('\n');
}
Al obtener este código, no entiendo completamente cómo funciona. Puedo ver que la memcpy toma cada elemento de la estructura y la convierte en una secuencia serial indexada por la variable 'i', pero no sé cómo la función USARTWrite empaqueta esto en una cadena, o cómo cargar la matriz con mi inicialización de estructura
Lo siento, esta publicación es un poco larga, pero estoy empezando esta alondra de programación y tratando de entender este concepto.
Gracias a Dave
EDIT:
wow, muchas buenas respuestas rápidamente - gracias chicos.
slaz: Eso me parece lógico, realmente no había pensado en ese enfoque, ya que todavía no he entendido bien los punteros, pero estoy empezando a ver que son una parte esencial de C, por lo que Yo lo veré debidamente.
Esta línea de código envía los datos a mi UART, ¿con qué reemplazaría la matriz que contiene el contenido del mensaje? Parece que me estoy perdiendo un paso lógico aquí donde tengo una variable que me dice que mis estructura inicia y lo grande que es, pero no hay variedad para enviar
USART_SendData(USART1, message_on_contents[array_count]);
Harper Shelby: Gracias por esa descripción , lo hace mucho más claro en mi mente.
rgds
de Dave
El trabajo que está buscando es la "serialización". Re-etiquetado. – dmckee
no siendo quisquilloso, pero en este lado del atlántico usamos una 's' en vez de una 'z. Solo semántica del inglés realmente, bastante justo. Dave – droseman