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.

[参考译文] F29H850TU:多核调试

Guru**** 2563960 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1568059/f29h850tu-multicore-debugging

器件型号:F29H850TU
主题中讨论的其他器件:F29H85X-SYSCONFIG、SOM

工具/软件:

我无法调试目标的 3 个内核、当我启动调试会话时、可以运行和中断内核 1、而当我加载内核 3 程序时、它不工作、在复位后卡在自由运行状态。

这是 Debug 输出
 '

线程:如下所示为 CPU1 running 和 CPU3 free running 状态。


如何解决此问题、如果有任何多核调试文档、将会有所帮助。

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

    尊敬的 Mahmoud:

    我建议使用此方法: F29H850TU:CCS 版本上的多核调试问题:20.3.0.14__1.9.0。 BTW 当您进入这种自由运行状态时、需要重置调试器。 我还看到您在使用 ISR(很可能是 NMI)、这意味着应该重置 CPU 并重新启动代码。  

    我目前正在编写多核文档、这些文档将在 TI.com 上发布。  

    此致、

    Aishwarya

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

    我 在 F29H85X-CCM-EVM 上尝试使用 SOM 20.2.0.12_180 运行 CPU1/3 双核和 CPU1/3 双核时遇到了一个非常类似的问题。 似乎任何项目或非项目启动都不会以相同的方式结束。 这是因为两个处理器都显示为正在运行、但没有 LED 闪烁、看起来只是正在处理 NMI。 他们不能暂停,

    当您尝试加载程序时、出现上一篇文章中列出的错误、如果我这样做、我会得到相同的结果。 但是、代码中的注释显示加载符号。 如果您仅加载符号、则没有错误、但内核不会运行。

    您有没有什么建议可以实现此目标、或者给出文档何时可用的一些指示?   

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

    Simon / Mahmoud、

    您是否 确实遵循了示例标头中提到的步骤、包括在无工程调试中更改存储体模式?  请 重试此操作、如果您仍然看到任何问题、请提供准确的步骤并进行设置以重现问题。 如果您尚未下载最新的 F2x-SDK 1.02。

    此致、

    Aishwarya

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

    在中、两个工程的存储体模式都更改为两种、即以_c29x1/3 结尾的存储体模式、不过我的理解是、当_c29x1 刷写时、它也会刷写内核 3 的应用程序、因此、当其发布时、可以启动软件。 从这个意义上讲、_c29x3 从不直接刷写、因此不需要更改调试模式、是这样吗?

     

    所采取的步骤

    1.导入 led_ex1_blinky_cpu1_cpu3_multi 工程。

    2.切换两个  以_c29x1/3 结尾的项目以调试闪存设置、存储体模式 2。

    3.已在此处检查其他调试设置  7.1.调试概述—Code Composer Studio 20.3.0 文档。 闪存设置与我介绍的内容不同、但尽可能匹配。

    4.. 通过 分组的 led_ex1_blinky_cpu1_cpu3_multi 工程构建这两个工程

    5.右键点击_c29x1/targetConfigs/F29H859TU9.ccxml 以开始无工程调试

    6.连接到 C29xx_CPU1 并通过 Run->Load->Load Program led_ex1_blinky_cpu1_cpu3_multi_c29x1.out 进行加载。

    7、程序加载、运行并在进入时停止

    8.单击蓝色箭头运行程序、然后在释放 CPU3 后的 Estop 处停止。 如果该内核此时正在运行、我会期望其中一个 LED 闪烁、但它们不闪烁。

    9.连接到 CPU3 和 Run->Load->Load Symbols  led_ex1_blinky_cpu1_cpu3_multi_c29x3.out

    10.尝试运行在 NMI 中暂停的 CPU1

    您能告诉我我我出了什么问题吗? 我尝试了在 CPU3 上加载程序并尝试了基于工程的调试、但它们最终都在同一个位置。

    此致

    Simon

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

    尊敬的  Aishwarya:
    我遵循了这种方法、输出没有差异。

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

    Mahmoud / Simon,

    绝对不要将程序加载到 CPU3 中、因为在第三步中会执行该操作。 换句话说、我们通过 CPU1 加载 CPU3 代码。

    已将两个工程的组模式更改为两种、即以_c29x1/3 结尾的模式、不过我的理解是、当_c29x1 刷写时、它也会刷写内核 3 的应用程序、因此、释放后将有软件启动。 从这个意义上讲、_c29x3 从不直接刷写、因此不应该更改调试模式、是否正确?

    是的、只需从 CPU1 更改存储体模式、因为您 实际上是在尝试对 SSU_GEN_REGS.BANKMODE 寄存器进行编程。 从技术上讲、您可以从 CPU3 写入此值、但不需要。 更具体地说、闪存 BANKMGMT 扇区中 BANKMODE 和 BANKMAP 的值在启动时自动加载到 SSU 寄存器中。

    能否确认  SSU_GEN_REGS.BANKMODE 的值? 对于 BANKMODE2、该值应为 0x9。 我注意到该示例不包括一个必要的步骤、即在闪存设置工具中配置 BANKMODE 之后与器件断开连接并向器件发出 XRSN。 此外、还要确保适当地使用 RAM 或闪存构建。

    此外、不确定您使用哪块电路板、但请参考原理图、确保示例中的 GPIO 与电路板上的 LED 相匹配。

    在重试之前、复位 CPU1 + POR 以清除 NMI/ESM/EA(更多详细信息请参见 TRM)。

    此致、

    Aishwarya

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

    作为前面所述的调试启动过程的一部分、我不知道在何时以及在何处检查和执行此操作。

    能否确认  SSU_GEN_REGS.BANKMODE 的值? 对于 BANKMODE2、该值应为 0x9。 我注意到该示例不包括一个必要的步骤、即断开与器件的连接并在闪存设置工具中配置 BANKMODE 之后向器件发出 XRSN。“

    请告诉我在哪里将这些步骤插入我的清单、以及如何实现这些步骤。 我在闪存设置中未看到任何内容、也无法通过观察查看 BANKMODE。

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

    我指的是这种方法  7.1.调试概述—Code Composer Studio 20.3.0 文档 ,当我尝试通过 CPU1 加载 CPU3 时,由于持续故障状态,它会再次导致自由运行问题,但对于 CPU1 而言

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

    执行 Run->Load->Load Program to CPU1 后、我逐步通过示例中的 Device_Init () 和 Board_Init 并观察了 SsuGenRegs.BANKMODE、尽管通过右键点击 C29xx_CPU1 Properties->Flash Settings 并将 BANKMODE 设置为 2、但似乎设置为 3。

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

    我现在稍微更改了程序、得到了不同的结果。

    1.从调试面板启动 F29H850Tu9.ccxml 上的调试会话

    2.连接至 CPU1

    3.右键点击、属性、闪存设置存储体模式 2、点击程序存储体管理。

    4. run> Load->Load Program led_ex1_blinky_cpu1_cpu3_multi_c29x1.out

    5.进入 SsuGenRegs.BANKMODE 现在为 9

    运行 CPU1 至 ESTOP0

    7.连接至 CPU3

    8.  run> Load->Load Symbols led_ex1_blinky_cpu1_cpu3_multi_c29x3.out

    9.运行 CPU1

    这仍会导致 NMI

    我注意到在调试输出上、它明确地说必须在对 BANKMGMT 进行编程后通过 XRSn 复位器件、您如何操作? 网络建议这是复位引脚、那么您只是按下板上的复位按钮吗?

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

    全部、

    总之、以下是运行代码所需的确切步骤:

    1. 连接至 CPU1。
    2. 注意:如果是闪存配置、请右键点击 CPU1 > Properties > Category:Flash Settings > navigate to select BANKMODE2。 调试控制台将指示 BANKMODE 更新。  退出闪存设置工具。  
    3. 断开与 CPU 的连接(建议步骤)。 通过以下两种方式之一发出 XRSN:
      1. 按下 controlSOM 或 LaunchPad 上的 XRSN 按钮。
      2. 导航至“Scripts">"CPU 复“ 复位“位处理“>"CPUID"<xmt-block0>“ Device_Reset_“ Device_Reset_。
      3. 注意:必须发布 XRSN。 如果不这样做、您将在 BANKMODE 寄存器中看到错误的值。  
    4. 仅加载 c29x1.out、加载程序后、运行 CPU1。
    5. 一旦 c29x1 禁用锁步、配置 CPU2 和 CPU3 并将其释放出 复位状态、程序就会停止。
    6. 立即连接到 CPU2 目标。 请勿加载 CPU2 程序。   一旦从复位状态释放、c29x2.out 就会开始执行。
    7. 立即连接到 CPU3 目标。 请勿加载 CPU3 程序。 c29x3.out  一旦从复位状态释放就会开始执行。
    8. 注意:如果是 RAM 配置、请重新启动 CPU2、CPU3 目标并加载 符号。

    此致、

    Aishwarya

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

    Mahmoud

    请参阅我昨天的答案、在这里您不应从 CPU1 加载 CPU3 程序。 通过加载 CPU1 程序、您将加载 CPU1、CPU2 和 CPU3 程序、因为 CPU1.out 文件是所有内核程序的组合映像。 有关确切步骤、请参阅上文。

    此致、

    Aishwarya

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

    Aishwarya,

    Mahmoud 和我正在进行相同的设置。 我们使用的是正在开发的固件应用、而不是示例工程。 已选择存储体模式 2。 正如我在上一个线程中提到的、我遵循以下步骤:

    右键点击 Core 1 target config file、然后选择 Start less Debug
    连接内核 1
    加载程序内核 1
    将内核 1 运行至 ESTOP0
    连接核心 3
    运行内核 3 和内核 1
    加载符号内核 3
    内核 3 按预期运行和停止。
    内核 1 无法停止、调试器输出显示:C29xx_CPU1:警告:目标 CPU 可能会卡在持续故障状态中

    由于内核 1 正在运行并且无法停止、因此我无法分辨其正在执行的操作以及如何对这种情况进行故障排除(目标 CPU 可能会卡在持续故障状态中)。 请注意、它确实会在 ESTOP0(在初始加载程序之后)停止、但在那之后不会再次停止。 你有什么建议吗?

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

    Robert、

    感谢您澄清了它是一个定制项目。

    如果您看到您在 NMI 中、nmistruct 的值是什么? 能否分享 CPU1 和 CPU3 ESM 和 EA 的错误处理脚本的结果?  有关如何执行此操作、请参阅本主题中的第一个回复。 如果您通过这两种方法没有看到任何内容、请检查 M0 RAM 以查看是否保存了任何错误、如下所述。

    此外、您是否使用默认提供的 lnk 命令或对其进行了更改? 这也可能是 问题所在。

    此致、

    Aishwarya

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

    Aishwarya,

     CPU1 和 CPU3 ESM 和 EA 的错误处理脚本的结果为:

    您是否在这些脚本输出中看到任何问题?

     提供的默认 lnk cmd 是什么?

    此外、

    我运行了一些测试、如果我在 main() core1 中注释掉以下内容、则可以按预期暂停并继续:

    //ENINT;
    //  Interrupt_enableGlobal()
    谢谢。
    Robert

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

    Robert、

    如错误日志所示、错误与中断退出@0x1002064C 有关。 确保您具有正确的中断属性、无论是 INT 还是 RTINT。 这很可能是问题所在。 您可以在任何相关示例工程中参阅 SysConfig board.h。 如果尚未使用 SysConfig、请这样做以防止出现此类问题。  

    我指的是示例工程以及 device_support 文件夹中的默认链接器命令。

    是的、这是有意义的、因为问题与中断有关。 但是、如果您将此注释掉、则不会执行中断。

    此致、

    Aishwarya

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

    Aishwarya,

    感谢您的建议。  

    1) 是否有办法将中断退出地址映射到导致问题的中断?

    2) 如何确定给定中断的正确属性 INT 或 RTINT ?

    3) 最新的 EA 状态显示:

    类似的问题是、如何映射此值以确定导致问题的原因?

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

    Robert、

    TRM + F29x 错误处理和调试指南中详细介绍了错误处理。 请参阅以下内容、了解如何调试错误。 下一次 TRM 迭代将进一步详细介绍不同的错误及其含义。  

    1) 是否有办法将中断退出地址映射到导致问题的中断?

    在应用代码和“Disassembly"中“中、该地址到底指向了什么? 地址将指向错误所在的位置、例如、如果您看到问题出在通用 RETI.INT 中、您可以设置断点或甚至注释掉 ISR 以确定哪个断点。 在不知道您的代码是如何构建的情况下、我只能提供这些一般性建议。  

    2) 如何确定给定中断的正确属性 INT 或 RTINT?
    您可以在任何示例工程中为此引用 SysConfig board.h。 如果尚未使用 SysConfig、请这样做以防止出现此类问题。  [/报价]

    任何使用中断的 F29x SDK 示例都会为 board.h 中的中断生成正确的设置 只要您在中断的原始定义中具有此属性、就无需在整个代码库中重复此操作。

    [quote userid=“220407" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1568059/f29h850tu-multicore-debugging/6051098

    3) 最新的 EA 状态显示:

    类似的问题是、如何映射此值以确定导致问题的原因?

    [/报价]

    如第一个答案中所述、检查该存储器中的内容并从该存储器中退出。 另请参阅资源。  看起来您可能 更改了代码、但这导致了另一个问题?

    此致、

    Aishwarya