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:CPU2 *。OUT 负载会破坏 CPU1使用的 RAM

Guru**** 2589280 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/611938/ccs-tms320f28377d-cpu2-out-load-corrupts-ram-used-by-cpu1

器件型号:TMS320F28377D
主题中讨论的其他器件:UNIFLASH

工具/软件:Code Composer Studio

我遇到了一个问题、即我有一个大型 SYS/BIOS 程序在 CPU1和 CPU2之间拆分全局共享 RAM 的使用。  看起来、下载 CPU2的行为会破坏 CPU1用于 BIOS 堆栈/堆使用的 RAM、大概是全局共享 RAM 之一。

我们已通过相应的输出*。map 文件验证了对于任何全局共享 RAM、CPU1和 CPU2没有意外重叠。  GS12 RAM 中有一小部分特意重叠的 RAM。

我们认为、当 CPU2加载其各自的*。out 文件时、CCS 工具将写入 CPU1 (堆栈)使用的全局共享 RAM。  我们具有以下测试结果、得出了这一结论。

  1. 加载 CPU1,运行至 main()
  2. 加载 CPU2、运行至 main()
  3. 继续在 CPU1上执行
    1. 在空闲线程的堆栈检查期间观察异常中断()
  4. 重新启动 CPU1未观察到 ABORT()、启动 CPU2
    1. 系统正常运行、无中止、一切正常
  5. 加载 CPU2 (CPU1仍在运行)
    1. CPU1在空闲线程的堆栈检查期间中止()

加载 CPU2时、CCS 调试工具是否可能会写入我们的一些共享 RAM?  我们如何防止这种情况?  我们是否应该更改 GEL 文件设置?

谢谢、

Stuart

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

    谢谢、
    Stuart
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    供其他人参考:自从用户接触我们的 FAE 后、此问题正在离线处理。 我们稍后将更新该主题、并提供详细信息。

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

    我想对这条线程提供一些接近。  感谢幕后工作人员提出解决方案。  这里的问题是 CCS 调试器在下载到闪存存储器时使用共享 RAM 作为暂存区。  事实上、我们将其中一些共享存储器用于 CPU1上的堆栈、下载到 CPU2的过程是通过 CPU1堆栈进行写入、从而损坏它。

    使用共享 RAM 的原因是、可以使用的专用 CPU 专用 RAM 的其他部分可能被安全锁定、因此无法保证调试工具可用。  除了共享 RAM、调试工具还使用 M0和 M1 RAM。

    我想指出、在给定的应用中避免特定的共享存储器区域是无效的策略。  这是因为、虽然 TI 内部存在共享存储器区域、但我们知道我们今天使用的共享存储器区域、这些区域可能会随着时间的推移而变化或扩展、以便在未来添加其他调试功能。

    在这种情况下、正确的解决方案是在 CPU1和 CPU2的调试设置中禁用"自动运行"功能。  这样、CPU 执行(例如、到 main)将直到调试器使用共享存储器完成后才开始。  这些设置可在调试配置菜单中找到:

    我想再做一个提醒。  在 C2000架构中、堆栈必须放置在地址空间的前16位中的 RAM 地址中。  在这个特定问题和调试中、情况已经是这样了、但我想在有人遇到类似问题时无论如何都注意到这一点。

    谢谢、

    Stuart

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

    感谢您基于我们的离线调试发布详细信息。

    对于那些甚至在到达 main()之前就将一些数据从闪存复制到 RAM 或初始化某些 RAM 的用户,我们始终建议在执行应用程序之前将映像加载到两个内存组中(甚至是主内存)。

    此外、在这篇文章中、我想提及的是、CCS 片上闪存插件和 UniFlash 工具(与许多第三方工具一样)是为完全嵌入闪存的应用而开发的、该应用应该是一个独立的程序、其中包含链接到闪存的所有初始化段。 任何需要从 RAM 中执行的代码都应在运行时从闪存复制。
    此信息在 TRM 中提供。

    谢谢、此致、
    Vamsi