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.

[参考译文] CCS/TMS320F28377D:当使用 prama 指令绑定 CPU1和 CPU2变量时,如何为 SGRAM 中的 CPU1和 CPU2变量选择准确的地址顺序?

Guru**** 2394305 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/756243/ccs-tms320f28377d-how-can-i-chose-the-exact-address-order-for-cpu1-and-cpu2-vars-in-sgram-when-binding-them-with-prama-directive

器件型号:TMS320F28377D

工具/软件:Code Composer Studio

你(们)好

在同一芯片中的 CPU 之间使用 pragma 指令绑定共享的 var 时、我需要匹配地址;现在、我通过链接器获取因果顺序。 接下来、我报告我正在使用的代码:

  • Var_CPU1.h
uint16_t mIPFC_W、mIC1PFC、mIC2PFC、mIC3PFC、mEMVOUT_U、 mEMVOUT_V、mEMVOUT_W、mIL1_DCDC、mIL2_DCDC、mIPFC_U、 mIPFC_V、mPFCCVIN_U、mPFCCVIN_V、mPFCCVIN_W;
#pragma DATA_SECTION (mIPFC_W、"SHARERAMGS15");
pragma DATA_SECTION (mIC1PFC、"SHARERAMGS15");
#pragma DATA_SECTION (mIC2PFC、"SHARERAMGS15");
#pragma DATA_SECTION
(mIC3PFC、"SHARERAMGS15");#GSMA DATA_SECTION (mEMVOUT_U、"pragma RAME14"
、"pragma RAMEV";#pragma 14_RAMERAME"
#pragma DATA_SECTION (mEMVOUT_W、"SHARERAMGS14"); 
  • Var_CPU2.h
uint16_t mIPFC_W、mIC1PFC、mIC2PFC、mIC3PFC、mEMVOUT_U、 mEMVOUT_V、mEMVOUT_W、mIINV_U、mIINV_V、mIINV_W、 mIINV_N、mINVOUT_U、mINVOUT_V、mINVOUT_W;
#pragma DATA_SECTION (mIPFC_W、"SHARERAMGS15");
pragma DATA_SECTION (mIC1PFC、"SHARERAMGS15");
#pragma DATA_SECTION (mIC2PFC、"SHARERAMGS15");
#pragma DATA_SECTION
(mIC3PFC、"SHARERAMGS15");#GSMA DATA_SECTION (mEMVOUT_U、"pragma RAME14"
、"pragma RAMEV";#pragma 14_RAMERAME"
#pragma DATA_SECTION (mEMVOUT_W、"SHARERAMGS14"); 

这是 CPU 的映射结果:

如何匹配 var 地址? 是否有一种简单的方法可以将其告知链接器?

下面、我报告 cmd 文件部分:

(笑声)
//用于在 CPU1&CPU2
RAMGS14之间共享数据 :origin = 0x01A000、length = 0x001000/*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
RAMGS15 :origin = 0x01B000、length = 0x001000/*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
。
// CPU
SHARERAMGS14之间的数据交换:> RAMGS14,PAGE = 0/*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
SHARERAMGS15:> RAMGS15,PAGE = 0...

也许、我必须为每个 var 指定一个具有确切原始地址和长度的 var 链接器段;这种方法看起来 非常奇怪。

非常感谢您的帮助。

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

    完全控制变量在存储器中的布局方式的唯一方法是在手工编码的汇编语言中定义它们。 这听起来可能很困难、但并不是那么困难。  请按照与以下类似的步骤操作。

    添加编译器选项--src_interlist。  此选项告诉编译器保留自动生成的汇编文件、而不是将其删除。  此外、还添加了注释、使汇编代码更易于理解。  该文件与源文件具有相同的名称、扩展名更改为.asm。

    构建一个定义目标全局变量的源文件。  检查生成的汇编文件。  请注意如何使用汇编器指令.usect 和.global。  在 C28x 汇编工具手册中阅读有关这些指令的信息。

    现在、您可以编写手动编码的汇编文件了。  全局变量将与源的顺序相同。  像任何其他源文件一样、将汇编文件添加到 CCS 工程中。

    在链接器命令文件中,可以使用类似的语法将变量分配到所需的位置...

    .shared_variables > 0x1234 

    这将创建一个名为.shared_variables 的输出段。  将此名称更改为您在汇编文件中使用的任何段名称。  它将所有名为.shared_variables 的输入段集合在一起。  在这种情况下、只有一个具有该名称的输入段来自汇编文件。  将0x1234更改为所需地址。

    谢谢、此致、

    乔治

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

    你(们)好。

    非常感谢您的建议。 同时、我尝试使用结构分配来强制 var 地址执行 biding。 无论如何、我想测试您的过程。

    祝你度过美好的一天:)