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:有关 MemCfg_setGSRAMControllerSel 函数使用的问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1305780/tms320f28388d-question-about-memcfg_setgsramcontrollersel-function-usage

器件型号:TMS320F28388D

工程师、您好、我最近使用28388D 进行数据处理、由于我在 CPU2中进行大量数据计算、我在 CPU2中耗尽了 RAMLSx、因此我使用了 RAMGS0~RAMGS4、并使用 MemCfg_setGSRAMControllerSel 函数在 CPU1中分配它们、如下所示:

我的 CMD 文件如下:

但是、在我烧录程序之后、我发现一些垃圾数据分配给数组中一些全局变量的初始值、如下所示、我的内存分配函数是否存在问题?

非常感谢!

期待您的回复!

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

    您好!

    在调试会话中、您是否确保在尝试查看该存储器时选择了正确的内核? 您需要确保在调试会话显示的"Debug"窗口中选择 CPU2、但这不会自动发生。

    如果您已经这么做了、您能否告诉我您在代码中将哪些值存储到这些变量中、以及在 Memory Browser 中显示了哪些值(即十六进制值)?

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

    您好、工程师。

    是的、我的调试窗口位于 CPU2中、以以下变量为例

    我将这些变量的初始值设置如下

    存储器浏览器:

    非常感谢!

    期待您的回复!

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

    遗憾的是、由于我手头没有可正常工作的 F2838xD 器件、因此无法在我这边复制。

    您是否能够尝试使用 float64_t 数据类型来代替双数据类型? 其他变量、数组或数据类型(即 int、char 等)是否会发生这种情况? 添加"volatile"关键字是否会影响此情况?

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

    我的算法需要高精度、并且在计算过程中必须使用双精度变量。 您有没有其他使用过 F28388D 的同事吗、您可以联系他们吗? 此外、您能否与我分享 MemCfg_setGSRAMControllerSel 函数的几个用例?
    非常感谢!
    期待您的回复!

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

    周先生、您好!

    我使用过 F2838xD 并熟悉该器件(它与使用我们现有的任何其他较新器件没有太大的区别)。

    此外,您能否与我分享 MemCfg_setGSRAMControllerSel 函数的几个用例?

    此函数用于配置哪个 CPU 可以访问参数中使用的 GSRAM。 您应该在代码的开头设置此值、而不是在一个 CPU 和另一个 CPU 之间来回切换(如果您需要在两个 CPU 之间进行数据通信之类的操作、则应使用 IPC)。

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

    大家好、工程师、我的 CPU1用于数据通信、CPU2用于数据处理、我使用 IPC 完成了从 CPU1发送数据到 CPU2的任务、我的 MemCfg_setGSRAMControllerSel 函数运行良好! 昨天、一位工程师告诉我、为了在闪存中加载代码、需要将闪存 API 加载到 RAM 中、因此更改了一些值、为 CPU2分配一些 GSxRAM。 垃圾值实际上是加载到这些 RAM 中的闪存 API 代码。 我该如何使用 SimpleLink SDK
    非常感谢!
    期待您的回复!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    昨天一位工程师告诉我,要在闪存中加载代码,需要将闪存 API 加载到 RAM 中

    答对了、闪存 API 只能从 RAM 运行。

    垃圾值实际上是加载到这些 RAM 中的闪存 API 代码。

    工程师需要查看链接器命令文件、并将全局变量分配给不太可能被覆盖的 RAM 之一、从而使变量保留其值。 要执行此操作、您可以查看分配给.bss 段的存储器(该段在 链接器命令 文件页面包含全局变量)。 或者、工程师也可以使用 pragma 语句将全局变量定位到特定的内存位置: #pragma DATA_SECTION (var_name、"ramgs#")。

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

    这里您是指修改.bss、如下所示、我将其从 RAMLS3修改为 RAMGS4、但它没有达到诀窍!

    随后、我使用了#pragma DATA_SECTION (qnb、"RAMGS4")(作为 qnb 的示例) qnb 中的值已恢复正常、但在编辑以下警报后发生、该警报是否会对程序运行产生任何影响?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将其从 RAMLS3修改为 RAMGS4,但它没有做到这一点!

    您能否确认一下这样做的含义、这些变量是否未更改其地址、或者地址的更改是否仍会导致其被覆盖?  我不知道闪存 API 是如何加载到 RAM 的、但如果您知道它加载到了哪个 RAM、可以尝试选择非常远的存储器单元(如果未使用 RAMGS15、则会如此)。

    随后、我使用了#pragma DATA_SECTION (qnb、"RAMGS4")(作为 qnb 的示例) qnb 中的值已恢复正常、但在编辑以下警报后发生、该警报是否会对程序运行产生任何影响?

    [/报价]

    它应该不会影响您的程序、但建议解决此错误。 如果您使用的 CCS 编译器版本超过4.4 (即22.6.0)、那么您可以参阅 此页面、 了解有关警告的详细信息:

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

    我能够修复内存问题、变量不再显示垃圾计数、但我之前提到过警告!
    您好、您给我发送的最后一件事是图像、我无法访问上面的 URL、您能给我发送文本吗?
    非常感谢!
    圣诞节快乐!

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

    周先生、您好!

    上面的链接应该可以正常工作、警告文本已完全包含在上方;对于该屏幕截图中的链接、我需要在单个屏幕截图中包含太多文本。 我会将两个 URL 放在下方、如果您访问时遇到问题、请告诉我:

    https://software-dl.ti.com/ccs/esd/documents/sdto_ccs_build-errors.html

    https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_Linker-Command-File-Primer.html

    圣诞节快乐!

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

    谢谢、我已经解决了这个问题