This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TMDX570LC43HDK:奇怪的(对于ME)结构字节赋值

Guru**** 2382270 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/641237/compiler-tmdx570lc43hdk-strange-for-me-byte-assignment-to-struct

部件号:TMDX570LC43HDK

工具/软件:TI C/C++编译器

hy,

可能是个愚蠢的问题,但这是我第一次遇到这个问题,

它涉及以此方式定义的结构

typedef结构ftethernet_frame

   UINT16 VLAN_tag;                  // 0x60,0x0a,
   UINT8 message_id;             // 0x02
   UINT16 frame_length;           // 0x01,0x00
} ftethernet_frame_t;

注释中的值描述了如何使用测试阵列加载它:

静态连接uint8 pkt1[60]={
0x60,0x0a                                            ,// vlan_tag
0x02,                                                  // message_id
0x01,0x00                                             // frame_length
};

以下指令的结果对我来说是无法预测的

   ftethernet_frame_t *frame_rx;
   frame_rx =(ftethernet_frame_t *) pkt1;

事实上,我有以下几点:

您能说出为什么frame_length是0x0000而不是0x0100吗?

谢谢

Antonio

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不确定,但我怀疑您的代码没有考虑到message_id和frame_length字段之间1字节的对齐填充。  如果要避免此填充,请使用打包结构。  有关该功能的详细信息,请参阅 ARM编译器手册 中标题为“类型属性”的部分。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢!
    Antonio