乐鑫技术交流
直播中

tr12345

8年用户 940经验值
擅长:制造/封装
私信 关注
[问答]

如何使用CHERTS MinGW设置来做消息结构?

我正在创建一个消息结构,用于与另一个 MCU 进行串行通信
我想创建一个包含字段的结构,这样我就可以使用一个允许字段访问和流访问的联合。
仅当我可以在不填充字节的情况下打包结构时,这才有效。如何使用 CHERTS MinGW 设置来做到这一点?
代码:全选typedef struct
{
   byte fld1;
   byte fld2;
} field_type;

typedef union
{
   field_type fld;
   byte             arr[2];
} packet_type;



               
代码:全选#pragma pack(push, 1)

typedef struct
{
   byte fld1;
   byte fld2;
} field_type;

typedef union
{
   field_type fld;
   byte             arr[2];
} packet_type;

#pragma pack(pop)






回帖(1)

孙成红

2024-6-3 17:04:45
要使用 CHERTS MinGW 设置来设置消息结构并避免填充字节,您可以使用以下代码:

```
#pragma pack(1)

typedef struct{
    byte fld1;
    byte fld2;
} __attribute__((packed)) field_type;

typedef union{
    field_type fld;
    byte arr[2];
} packet_type;

#pragma pack()
```

在上面的代码中,`#pragma pack(1)` 指示编译器以尽可能少的字节对齐结构体成员。`__attribute__((packed))` 也将确保不会有任何填充字节。最后,`#pragma pack()` 恢复编译器默认的字节对齐设置。

这样,您就可以使用 `packet_type` 结构体来定义消息,并同时获得字段访问和流访问的优点,而无需担心填充字节。

请注意,如果使用不同的编译器,这种情况可能会有所不同。因此,确保在应用此代码前,先了解您的编译器的编译器指令和属性。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分