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.

[参考译文] 编译器/MSP430FR6.9891万:有关MSP430 16位值是否需要对齐的问题

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/630451/compiler-msp430fr69891-question-about-whether-alignment-is-necessary-on-the-msp430-for-16-bit-values

部件号:MSP430FR6.9891万

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

您好,

我正在处理的设计遇到了一个问题,感觉像是对齐问题。

基本上,它看起来像一个全局16位值,它在结构中没有被正确写入或读取。  我想知道是否存在对齐的一般问题,即要求在一个均匀的地址上对齐所有变量。  我很难相信这一点,我还没有找到任何TI文档,用于编译器或MSP430,其中指出必须进行校准。  与MSP430中的偶数地址一致的唯一功能是程序计数器和堆栈指针。

如果有任何人知道TI提供的任何文档,其中介绍了编译器和/或MSP430 (特别是MSP430FR6xx系列)中的对齐要求,我将非常感激。  我在谷歌上搜索了很多地方,到目前为止,我还没有从TI看到任何东西。

提前感谢您提供的任何帮助。

亚当

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

    MSP430编译器用户指南(processors.wiki.ti.com/.../TI_Compiler_Information)的6.2 技术参考指南第1节“数据类型存储”中的表格显示了每个基本数据类型的大小和对齐情况。 此表显示所有基本类型的大小为16或更大的大小都需要16位对齐。

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

    非常感谢链接。 我在编译器手册中不知怎么遗漏了这一点。 非常乐于助人

    您是否知道为什么需要强制执行此调整? 我假设MSP430中有一个架构要求需要进行这种调整? 如果您知道一份讨论此问题的TI文档,我将不胜感激。

    此外,我发表此帖子的原因是,我看到正在处理的基于MSP430的固件中的全局16位数据被放在一个奇数地址上。 发生这种情况时,写入或读取的值不正确。 固件中的某些内容导致此情况发生变化,我不确定具体时间,但这正是我尝试了解的情况。 我正在尝试将一些非常简单的测试用例组合在一起,其中包含结构定义,以显示它们在地图文件中的位置。 到目前为止,我的简单测试表明,这些结构始终放置在一个均匀的地址。

    再次感谢您的帮助!

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

    我看到的问题的根本原因是#pragma pack( push, 1)从未弹出。 在查看代码时,缺少POP的原因并不是很明显,因为它是以独立于平台的方式完成的。 MSP430案例的Pop在几个月前被遗忘了。 而且,这个问题现在才神秘地开始成为一个问题。 缺少弹出的压缩导致其他结构出现问题,因为它们被打包为1字节对齐,而不应该是这样。

    总之,我已经解决了我所看到的对齐问题。 您对编译器用户指南中记录的对齐要求的回答非常有帮助。

    如果您知道其他TI文档中说明为什么需要对齐的位置,这也将非常有帮助。

    非常感谢您的帮助。

    亚当