Thread 中讨论的其他器件:C2000WARE
工具与软件:
您好!
您能否提供有关结构和内存使用中变量的手册?
当在结构中声明8个浮点变量时、CLA1_MSGRAMHIGH 存储器使用量为100%
在结构1中声明6个浮点变量、在结构2中声明2个浮点变量时、该值会减小至87%
通过将它们分离为3个结构、它会降低到75%。
您能告诉我为什么会有所不同吗?
这是否由于结构填充? 如果可以、编译是否存在任何问题?
谢谢。
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.
工具与软件:
您好!
您能否提供有关结构和内存使用中变量的手册?
当在结构中声明8个浮点变量时、CLA1_MSGRAMHIGH 存储器使用量为100%
在结构1中声明6个浮点变量、在结构2中声明2个浮点变量时、该值会减小至87%
通过将它们分离为3个结构、它会降低到75%。
您能告诉我为什么会有所不同吗?
这是否由于结构填充? 如果可以、编译是否存在任何问题?
谢谢。
尊敬的 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