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.

[参考译文] 编译器/TMS320F28375D:如何防止16位填充

Guru**** 2422790 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/761187/compiler-tms320f28375d-how-to-prevent-16-bit-padding

器件型号:TMS320F28375D

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

您好!

我们的客户希望了解如何防止代码中的16位填充、如下所示。

   结构{
      无符号短整型 x;
      unsigned long y;
      无符号短整型 z;
      unsigned long w;
   }c ={0x1234、0x3456789a、0xabcd、0xcdef1234};

请帮您获取请求的答案吗?

此致、


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

    我相信原因是你有一个短变量、然后是一个长变量。 long 变量应始终按2个字节对齐。 也就是说、起始地址需要偶数(非奇数)、这就是您在短变量和长变量之间看到16位填充的原因。
    您能否按如下所示重新排列结构?

    结构{
    短 x;
    短 z;
    Long y;
    长 w;

    这可确保 x 和 z 占用前2个字节、而下一个可用地址将按2个字节对齐

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

    感谢您的快速回复。

    是的、您的建议可以是一种方法。
    我会询问客户。

    但是、您能否调查是否存在编译选项或诸如"pack"之类的 pragma?
    我们的客户使用编译器 v17.9.0.STS。
    如果 pragma "DATA_ALIG"可以是防止填充的另一种方法、您能否提供一些示例代码来说明如何使用?

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

    我们的客户要求;
    对于"一个长整型变量应始终与2个字节对齐。"这句话、
    在什么文档文件中可以看到描述?
    由于他们将重复使用已经有的源代码、他们需要避免大量工作来更改结构。
    是否有其他的想法?

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

    由于 long 变量的大小为2个字节、我假设编译器自动对齐该变量以获取偶数地址。 我不确定是否有一种具有未对齐地址的长变量的方法。
    我已将您的查询重新定向到编译器团队。

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

    遗憾的是、C2000编译器没有用于打包结构成员的方法。   

    谢谢、此致、

    乔治