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.

[参考译文] TMS320F28377D:内存使用

Guru**** 2484745 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1431566/tms320f28377d-memory-usage

器件型号:TMS320F28377D
Thread 中讨论的其他器件:C2000WARE

工具与软件:

您好!

您能否提供有关结构和内存使用中变量的手册?

当在结构中声明8个浮点变量时、CLA1_MSGRAMHIGH 存储器使用量为100%

在结构1中声明6个浮点变量、在结构2中声明2个浮点变量时、该值会减小至87%

通过将它们分离为3个结构、它会降低到75%。

您能告诉我为什么会有所不同吗?

这是否由于结构填充? 如果可以、编译是否存在任何问题?

谢谢。

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

    尊敬的 David:

    编译器可以填充字节、以对齐结构定义。 请参阅部分  7.1.7字段/结构对齐 链接的 C2x 编译器指南的链接 。 一种检查这一点的方法是打开 CCS Memory Browser (View >> Memory Browser)并检查结构中每个浮点型变量所在的地址。  

    您是否使用 C2000ware 中的某个链接器 cmd 文件? 如果是、哪一个?

    此致、

    Delaney

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

    尊敬的 David:

    我将关闭该主题、因为我们已转到电子邮件。

    对于未来遇到该主题的 e2e'pl rs、我的调查结果如下:

    我对自己的匹配客户设置进行了一些测试、并能够将与3个用例进行复制:

    情形1:在结构中声明8个浮点变量时、CLA1_MSGRAMHIGH 内存使用量为100%

    例2:当在结构1中声明6个浮点变量、在结构2中声明2个浮点变量时、会减小到87%

    案例3:将它们分离为3个结构、可以减小到75%。

    我只能在有其他数据连同1-3个结构被分配到 CLA_MSGRAMHZ 存储器时看到不同情况下内存使用百分比的差异(就像在客户案例中、他们还分配了 claLPF、cla1LPF、cla1Change 等以及结构)。 在未分配另一个变量的情况下、每种情况显示相同的50%存储器使用率。

    这种行为似乎是因为、在案例1中、编译器需要找到更大的连续存储器区域来放置结构、而在案例2和案例3中、编译器可以将它们拆分为不同的位置。 存储器的 CLA_MSGRAMHIGH 部分相对较小、结构中的总数据将占用4B x 8 x 4 = 128B (无论在哪种情况下)、这是 CLA_MSGRAMHIGH 总存储器大小的一半。 下图显示了在没有分配另一个变量以及分配了另一个变量的情况下、根据我在 Memory Browser 中观察到的情况、在 CLA_MSGRAMHIGH 中放置数据的位置。

     

    从我观察到的情况来看、内存分配视图表明某个段为100%满并不总是意味着无法在其中分配更多数据。 此百分比表示内存中的数据量、而不是实际写入的总数据量。 要回答这个问题、使用8个单独的结构分别具有一个浮点值(或仅具有8个单独的浮点值)将为编译器提供需要分配给连续地址的较小存储器块、因此如果他们真的希望最大化该存储器、这会有所帮助。 如果程序尝试分配的数据超过了应有的空间、编译器将抛出错误、因此不必过多地写入即可。

    此致、

    Delaney