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.

[参考译文] TMS320F28388D:将 EBSS 部分分配给全局 RAM 以生成将在两个内核上加载的单个可执行文件

Guru**** 2616675 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1061569/tms320f28388d-ebss-section-assignment-to-global-ram-to-generate-single-executable-that-will-be-loaded-on-both-the-cores

器件型号:TMS320F28388D
主题中讨论的其他器件:C2000WARE

您好!

我正在尝试开发一个将加载到两个内核上的可执行文件。 但是、每个内核将根据特定的输入执行不同的任务。

为了开发 单 个可执行文件并确保其他内核不会发生内存争用、我使用命令链接器文件创建了项目、其中 ebss 段分配给本地共享 RAM。 这样、每个内核 都将变量 存储在 各自的内核本地 RAM 中、以保持独立的存储器。  

现在我有一种情况、我需要为每个内核分配更多变量、并且我可能会在每个代码的本地 RAM 中耗尽内存。

您能不能建议我如何将 ebss 段分配给全局共享 RAM (50%的 GSRAM 分配给 Core1、50%的 GSRAM 分配给 cor2)、同时只有一个命令链接器文件来生成单个可执行文件。

提前感谢、

Munaf

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

    Munaf,  

    您可以参阅 C2000Ware 中提供的"memcfg_ex1_ram_management_CPU1 - RAM 管理示例"。  此示例展示了如何分配供 CPU02 和 CPU01内核使用的共享 RAM。

    此致

    Siddharth

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

    您好 Siddharth、

    感谢重播。

    "memcfg_ex1_ram_management_CPU1 - RAM 管理示例"示例在 code composer studio 中创建两个项目。 每个项目或内核都有其命令链接器文件来分配 GSRAM。  我没有这种情况。

    我正在创建一个工程(一个工程)以生成可执行文件、该可执行文件将加载到两个 Core 上。 将在两个内核中刷写相同的代码映像。 这意味着 、两个内核将执行相同的变量副本和相同的函数副本。 为了保持存储器的独立性、目前我在本地共享 RAM 中分配变量。

    更多详细信息:

    ********

    使用 LSRAM:

    在命令链接器文件的 LSRAM 中分配 ebss。

    在应用程序代码中定义全局变量"VAR1"。

    在两个内核中生成并刷写可执行文件(相同的 exe)。

    VAR1将存储在每个内核的 LSRAM 中。 Core1将拥有自己的 VAR1副本、而 Core2也将在其 LSRAM 中拥有自己的 VAR1副本。

    将 VAR1存储在每个内核的 LSRAM 中、在 应用程序函数中使用 VAR1时不会损坏任何内存。

     

    使用 GSRAM:

    在命令链接器文件中的 GSRAM 中分配 ebss。

    在应用程序代码中定义全局变量"VAR1"。

    在两个内核中生成并刷写可执行文件(相同的 exe)。

    VAR1将存储在 GSRAM 中。 (例如:在存储 器0x00D000处)。 Core1和 Cor2将从同一存储器访问 VAR1、并且两个内核都尝试读取或写入 VAR1。 这将始终是一个问题、并导致意外行为。

    我的问题是:如何使用 GSRAM 来存储不会导致任何存储器争用的全局变量、如上所述。 我想将 50%的 GSRAM 分配给 Core1、将50%的 GSRAM 分配给 core2、而仅具有项目文件(一个链接器命令文件)。

    请建议满足我需求的任何替代选项(任何链接器选项)。

    谢谢、

    Munaf

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

    Munaf,  

    您能否解释一下在两个内核上加载相同代码的原因  、因为在 F2838x 的情况下、C28x1 (CPU1)内核充当主内核。  CPU2和 CM 内核必须由 CPU1应用程序引导。  

    此致

    Siddharth

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

    Siddharth、

    我完全了解这群人。 我的应用程序有95%的代码用于 core1和 core2。 由于支持 某些 输入、两个内核执行两种不同的功能、尽管它们刷写了相同的映像。 这是为了最大限度地减少一个额外的可执行文件。

    谢谢、

    Munaf

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

    Munaf,  

    通常、我们为每个内核使用不同的可执行文件(.outs)、因此不知道任何此类链接器选项

    一个建议: 代码中是否有任何#ifdefs 来标识特定于内核的代码? 如果是、您也可以在链接器命令文件中使用相同的文件。

    此致

    Siddharth

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

    您好 Siddharth、

    请您与技术团队联系、并告诉我有关此主题的任何建议。 感谢你的帮助。

    此外、您能否参考 建议(在命令链接器文件中使用#ifdefs、并在全局变量的源文件中使用)和示例。 我希望 、每个内核都将为此变量分配其自己的 GSRAM 存储器。

    谢谢、

    Munaf

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

    Munaf,  

    我不认为将相同的全局变量分配给不同的 GSRAM 位置是可能的。  

    您可以参阅 C2000ware 双核示例、其中预定义符号 CPU1和 CPU2用于标识内核。 我们在两个内核共用的源文件中使用#ifdef CPU1/CPU2。 您也可以在链接器命令文件中使用相同的命令。  

    此致

    Siddharth