#include <stdio.h>
#include <string.h>
#include<malloc.h>
#define LEN (14)
#define uint16_t unsigned short int
#define uint8_t unsigned char
unsigned char gFrameInfo[LEN];
unsigned char buffer[LEN+2];
typedef struct{
uint16_t Head;
uint8_t SourceID;
uint8_t DestinationID;
uint8_t Command;
uint8_t Data[7];
uint16_t Tail;
}FrameInfo_TypeDef;
int main() {
unsigned int i = 0;
#if 0
FrameInfo_TypeDef* sFrameInfo = (FrameInfo_TypeDef*)gFrameInfo;
for(;i<LEN+2;i++)
{
buffer[i] = i;
}
memset(gFrameInfo, 0, LEN);
//memcpy(gFrameInfo, buffer, LEN);
memcpy(sFrameInfo,buffer,LEN);
for(i=0; i<LEN; i++)
{
printf("gFrame[%d] = %d \r\n.", i, gFrameInfo[i]);
}
printf("sFrameInfo.Head = %d\r\n", sFrameInfo->Head);
printf("sFrameInfo.SourceID = %d\r\n", sFrameInfo->SourceID);
printf("sFrameInfo.DestinationID = %d\r\n", sFrameInfo->DestinationID);
printf("sFrameInfo.Command = %d\r\n", sFrameInfo->Command);
for(i=0; i<7; i++)
{
printf("sFrameInfo.Data[%d] = %d \r\n.", i, sFrameInfo->Data[i]);
}
printf("sFrameInfo.Tail = %d\r\n", sFrameInfo->Tail);
#endif
uint16_t a =256;
// FrameInfo_TypeDef* sFrameInfo = (FrameInfo_TypeDef*)malloc(sizeof(FrameInfo_TypeDef));
//FrameInfo_TypeDef* sFrameInfo;
FrameInfo_TypeDef sFrameInfo1;
// sFrameInfo = &sFrameInfo1;
FrameInfo_TypeDef* sFrameInfo = &sFrameInfo1;
sFrameInfo->Head = a;
sFrameInfo->SourceID = 2;
sFrameInfo->DestinationID = 3;
sFrameInfo->Command = 4;
for(int j = 0; j<7;j++)
{
sFrameInfo->Data[j] = 5+j;
}
sFrameInfo->Tail = 3340;
memcpy(buffer+2,sFrameInfo,LEN);
for(i = 0;i<LEN+2;i++)
{
printf("buff[%d] = %d \r\n.", i,buffer[i]);
}
printf("Hello C-Free!\n");
return 0;
}
在串口发送数据时,因为数据比较多,就想着结构体的数据直接赋值给数组,这样就可以直接发送(因为串口发送数据是一字节一字节发送),不需要一个一个赋值。
串口接受数据时也是同样的道理,数组强转结构体指针,这样不需要一个个解析,方便快速。
结构体发送时还要注意一字节对齐的问题。大家这个可以去别的博客看看。
参考下面链接。
https://blog.csdn.net/graduation201209/article/details/78556405