Hi,
I am attempting to copy the members of a struct containing a mixture of ints, char's and arrays of chars into a byte array to send to a serial line. So far I have
// 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');
// }
}
As I obtained this code, I don't fully understand how it works. I can see that the memcpy takes each element of the struct and makes it into a serial stream indexed by the 'i' variable, but I don't know how the USARTWrite function packetises this into a string, or how to load the array with my struct initialisation.
Sorry this post is a bit long, but I'm just starting this programming lark, and trying to get my head around this concept.
Thanks Dave