配列と構造体ポインタが相互に変換されます.
#include
#include
#include
#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(;iHead);
printf("sFrameInfo.SourceID = %d\r
", sFrameInfo->SourceID);
printf("sFrameInfo.DestinationID = %d\r
", sFrameInfo->DestinationID);
printf("sFrameInfo.Command = %d\r
", sFrameInfo->Command);
for(i=0; i<7; i++)
{
printf("sFrameInfo.Data[%d] = %d \r
.", i, sFrameInfo->Data[i]);
}
printf("sFrameInfo.Tail = %d\r
", 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
シリアルポートでデータを送信する場合、データが多いので、構造体のデータを直接配列に割り当てたいと思います.これで直接に送ることができます.シリアルがデータを受け取る時も同じ道理です.配列が強回転構造体の指針です.これは一つ一つの解析が必要でなくて、便利で速いです.
構造体の送信時は、バイトの配置にも注意が必要です.これは他のブログに行ってみてもいいです.
下のリンクを参照してください.
https://blog.csdn.net/graduation201209/article/details/78556405