配列と構造体ポインタが相互に変換されます.


#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