我試圖將包含ints,char和chars數組混合的結構的成員複製到字節數組中發送到串行線。到目前爲止,我有試圖將struct成員複製到字節數組中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');
}
正如我獲得此代碼,我不完全瞭解它是如何工作的。我可以看到memcpy獲取結構的每個元素,並將其變成由'i'變量索引的串行流,但我不知道USARTWrite函數如何將它分組爲字符串,或者如何將該數組加載我的結構初始化。
對不起,這篇文章有點長,但我剛開始編程百靈,試圖讓我的頭腦圍繞這個概念。
感謝 戴夫
編輯:
哇,多好的答案很快 - 謝謝你們。 slaz:對我來說這似乎合乎邏輯,我並沒有真正想過這種方法,因爲我還沒有真正掌握指針,但是我開始看到它們是C的一個重要組成部分,所以我應該看看。
這行代碼發送數據到我的UART,我會用什麼替換包含消息內容的數組?好像我在這裏缺少一個合乎邏輯的步驟,我有一個變量,告訴我在哪裏,我的結構開始和它多大,但沒有數組發送
USART_SendData(USART1, message_on_contents[array_count]);
哈珀謝爾比:謝謝你的描述,這讓我更清楚。
RGDS
戴夫
您正在尋找的工作是「序列化」。重新加標籤。 – dmckee 2009-01-27 18:03:53
不挑剔,但大西洋這邊我們用's'而不是'z'。只是英語的語義真的很公平。 Dave – droseman 2009-01-28 09:14:30