工具与软件:
尊敬的 Champ:
我要求为我的客户提供服务。
当按照以下方式声明结构变量时、编译器将自动将0用于数据对齐、它 始终使结构体的倍数为4字节。
是否有办法 使变量连续放置、并且不自动将0设置 为4字节?
typedef 结构_test
{
unsigned char a;// 2字节
unsigned int b;// 4个字节
}测试;

谢谢。此致、
Johnny
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.
工具与软件:
尊敬的 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.