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.

[参考译文] TMS320F280049:用于堆栈溢出检测的 ERAD 模块-应用程序和调试器之间的冲突

Guru**** 2526340 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1203909/tms320f280049-erad-module-used-for-stack-overflow-detection---conflict-between-application-and-debugger

器件型号:TMS320F280049

尊敬的支持部门:

我的目标是使用 ERAD 检测堆栈溢出情况。

我已经阅读了这些示例并且它们非常清晰、但我需要一些关于 CPU 和调试系统之间 ERAD 资源共享的更多信息。

TRM 第11.4段指出:

"最后一个选择是没有所有者。 在此模式下、两个应用
代码和调试器能够同时访问模块。 它对于软件至关重要、
无论是在应用程序端还是调试器端、都用于解决任何冲突。 在此模式下、可用于
调试器使用一些 EBC 单元和 SEC 单元、而应用软件使用其余的
"。

我知道器件280049支持8 BPS。

前提条件是全局所有者=无所有者

问题1:如果我使用 ERAD BP1进行堆栈 OVF 检测,调试器是否可以将剩余的7个用于 HW BP?

问题2:如果问题1的答案是肯定的,如果我在 CCS 中设置了 HW BP,如何确保 CCS 不会尝试真正使用 BP1?

问题3:当我在 CCS 的"Breakpoint"选项卡中设置 HW BP"右键点击"时、CCS 是否会修改全局所有者设置?

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

    您好、Davide、

    我正在研究这个问题、很快会回来与您联系。

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

    您好、Davide、

    Code Composer 应根据需要/按需使用 ERAD 资源。 因此、如果您设置硬件断点、CCS 将拥有 ERAD、然后使用第一个可用的 EBC 来设置所请求的断点。 如果您的应用已经配置并启用了 EBC、CCS 将继续下一个、直到找到可用的 EBC。

    若要配置硬件断点以供应用使用、请按照以下步骤操作:

    1. 使用 ERAD_getOwnership ()函数来确定调试器是否拥有 EBC。 如果是这样、请调用 ERAD_setOwnership (ERAD_Owner_NOOWNER)来释放 ERAD。 在 NOOWNER 模式下、应用程序和调试程序都能访问 EBC 资源、但应用程序负责避免冲突。
    2. 使用 ERAD_getBusCompStatus (ERAD_HWBPx_BASE)函数来检查特定断点是否在使用中。 如果该函数未返回 ERAD_STATE_IDLE、则 HWBPx 已由调试器或应用程序预先配置。
    3. 根据需要配置可用的 HWBP。
    4. 调用 ERAD_enableModules()以启用刚刚配置的断点。 此函数的参数是 ERAD_INST_BUSCOMPx (对于 EEBC/断点)和 ERAD_INST_COUNTERx (对于系统事件计数器模块);您可以或将多个模块一起一次性启用。

    我不确定你最后一个问题的答案。 但是、无论 CCS 是获得所有权还是保留 NOOWNER 设置、都应始终检查所有权并确保在更改 ERAD 配置之前设置 NOOWNER。 我确实认为、如果将所有者设置为应用程序、则 CCS 将无法使用 ERAD 设置硬件断点、因此应避免使用此设置。

    此致、
    Ibukun