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.

[参考译文] 编译器/TMS320F2.8379万D:CPU1和CPU2上的RAM占用空间不同,尽管使用相同的#pragma DATASECTION ("xxxx")顺序

Guru**** 2585275 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/603075/compiler-tms320f28379d-different-ram-footprint-on-cpu1-and-cpu2-although-using-same-pragma-datasection-xxxx-orders

部件号:TMS320F2.8379万D
主题中讨论的其他部件:LAUNCHLL-F2.8379万D

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

您好,  

我已开始使用LAUNCHTXL-F2.8379万D。  
概念是在CPU1上具有所有"IO事物",同时在CPU2上具有所有算法。
因此,我们的想法是将所有ADC结果和所有其他内容放入数组中,然后使用#pragma DATASECTION将这些结果与全局共享RAM绑定。
当然,ech项目的main.cpp文件中的代码略有不同,但#pragma DATASECTON´s的顺序相同。
我投资了.map文件,实际上CPU上的数组´s don´t具有相同的顺序,请参见底部的附件(mapfile,cmd files,pragma sections)。
两个项目都在优化级别-O2上运行,也尝试了具有相同结果的"关闭"条件。
我的问题是如何确保阵列在两个CPU´s映射文件上的排列相等?
一个想法可能是将全局共享RAM按每个阵列的大小按块进行编码,并在映射文件的部分区域中定义一个名称。 但这意味着一些打字努力,更重要的是,当数组大小发生变化时,忘记某些东西的风险会更高...
还有其他办法吗?

此致,  
Jasson


e2e.ti.com/.../CPU_5F00_0_5F00_PRAGMAS.txt

e2e.ti.com/.../CPU_5F00_1_5F00_PRAGMAS.txt

e2e.ti.com/.../CPU_5F00_0_5F00_CMD.txt

e2e.ti.com/.../CPU_5F00_1_5F00_CMD.txt

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

    请参阅 此论坛主题。  虽然原始问题不相同,但问题已接近。  您的问题的答案相同。

    谢谢,此致,

    -George

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

    您好Geroge:

    好的,我已经阅读了您链接的主题。
    在一次快速尝试中,我尝试了我的方法。

    我取消了预定义的RAMGS2区域的注释,并定义了我自己的两个区域,两个区域的大小都是0x32,即50 Int16类型的空间。
    我定义了

    RAM_TEST_1:原点= 0xE000,长度= 0x32
    RAM_TEST_2:原点= 0xE040,长度= 0x32

    区域a1 .:> RAM_TEST_1,页=1
    区域2:> RAM_TEST_2,页面= 1

    在c++文件中,我做了

    #pragma DATASECTION ("area1");
    Int16 myArr1[50];

    #pragma DATASECTION ("area2");
    Int16 myArr2[50];

    查看此工作的.map文件。 在两个CPU上´s阵列映射到同一位置。
    这是一种n´t的方式,还是会因为我没有考虑过的原因而在运行时崩溃?

    另外,我注意到,我需要将 RAM_TEST_2的源服务器定义为0xE040,而不是0xE032。
    n´t 0x40为dec.64,这似乎不是一个炉灶?

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

    遗憾的是,您误解了我在旧论坛主题中提出的建议。  控制内存中数据变量顺序的唯一方法是不在C或C++中定义它们,而是在手动编码的程序集中定义它们。  有关执行此操作的详细信息将在该帖子中提供。  

    您展示的技术是将特定变量放在特定地址的一种方法。  但它很麻烦,容易出错。  想象一下,对大约25个不同的变量进行这样的操作。

    谢谢,此致,

    -George