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.

[参考译文] TMS320F280039C:结构数据对齐

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1429546/tms320f280039c-struct-data-alignment

器件型号:TMS320F280039C

工具与软件:

尊敬的 Champ:

我要求为我的客户提供服务。

 当按照以下方式声明结构变量时、编译器将自动将0用于数据对齐、它 始终使结构体的倍数为4字节。

是否有办法 使变量连续放置、并且不自动将0设置 为4字节?  

typedef 结构_test

unsigned char a;// 2字节

unsigned int b;// 4个字节  

}测试;

谢谢。此致、

Johnny

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

    在 C28x 上是这种类型 字符 宽度为16位。  因此,总的大小...

    [报价 userid="488507" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1429546/tms320f280039c-struct-data-alignment "]

    typedef 结构_test

    unsigned char a;// 2字节

    unsigned int b;// 4个字节  

    }测试;

    [报价]

    ...是32位。   

    您可能对 使用 C28x CPU 进行字节访问一文感兴趣

    谢谢。此致、

    -George.

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

    您好、George:

    感谢您的答复。

    根据我的理解、C2000编译器不支持属性 紧凑 支持。

    用户可能必须按数据对齐的顺序手动声明变量以节省大小。

    在最新的发现,在项目 A,在 len 变量是连续的情况下,不与0添加到下一个结构, std 结构。  

    在项目 B 中、在 len 变量后有一个补码0、然后在声明 DSP_CFG 结构的地址之后。

    其中 std 是8字节结构、DSP_CFG 是16字节 结构。  

    (1)。 问为什么在项目 A 中,len 变量没有在下一个结构后面填充0 ?

    (2)。 是否有可供用户使用的编译器数据对齐规则?

    谢谢。此致、

    Johnny

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有编译器数据对齐规则可供用户使用?

    有。  请搜索 C28x 编译器手册 以查看标题为" 字段/结构对齐"的子章节。  它没有明确一点:结构的对齐是  其任何成员对齐的最大值。

    询问为何在项目 A 中、len 变量在下一个结构之后没有填充0?

    结构类型必须是这样 STRUCT_GUI_STD_CO.. 不包含需要2字对齐的成员、因此它可以从奇数字地址开始。  相比之下、是结构类型 STRUCT_DSP_Config 必须包含至少一个需要两字对齐的成员、因此它必须从偶数字地址开始。

    谢谢。此致、

    -George.