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/66AK2H12:正确的调试技术

Guru**** 2595770 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/619005/ccs-66ak2h12-proper-debug-technique

部件号:66AK2H12
“Thread:SysBIOS”中讨论的其它部件

工具/软件:Code Composer Studio

调试我的A15 ARM应用程序时遇到困难。

我的工作空间中有几个项目。 CCSE 7.2。 我用于EVM的所有目标配置和GEL文件都相同。

第一个项目是简单的Hello World。 从冷启动开始(所有设备都断开连接且未通电,CCS未运行),我启动所有设备,启动目标配置,加载GEL并连接ARM_A15_0。 i然后运行→加载我的test.out。 它跑起来,达到我的休息点。 一切都很好。

问题是,如何正确终止然后重新启动/调试? 如果我点击红色“终止”,然后使用“调试错误”按钮再次尝试调试,则内核显示它正在运行,但没有任何反应。 调试窗口显示内核正在(运行)。 我需要单击核心并重新启动,或者再次遇到错误。 我收到消息提示当前调试会话需要停止,我同意。 新的调试将开始,然后我可以重新调试,看起来很好。

我不介意上述所有内容,但我的下一个项目是Nimu_emacExample_EVMK2H_armBiosExampleProject。 我第一次从冷启动开始运行时,它就能工作。 我可以从提供的winapp测试应用程序testudp.exe ping它并执行UDP回显(它运行到失败:testudp:大小为1455时失败)。 我可以暂停,调试等。一切都很好。 但‘D我使用红色的“终止CCS”按钮终止并尝试重新启动(使用Bug),调试将ARM_A15_0显示为“已”(但红色的“终止”按钮是否再次可用?)。 有时,我会再次遇到错误,得到需要终止的警告,说"是",然后它将重新加载,但会话终止于

没有可用于"DO _AngelSWI (int,void *)[C:/ti\PDK _k2hk _4_0_6\packages\MyExampleProjects\Nimu_emacExample_EVMK2H_armExampleProject\Debug\Nimu_emacExamample_EVMK2H_BiosarmpleProject.bute]的源文件,位于0x800Biosc8处"

调试窗口显示:
“[ARM_A15_0] ti.SysBIOS.family.arm.GIC.HWi: line 1200: e_undefined: Hwi undefined, intnum: 211
xdc.runtime.Error.raise:正在终止执行”

在上述之后,它的作用就像我第一次描述的HelloWorld。 我可以终止(红色按钮),然后启动另一个调试会话(错误按钮),并且每隔一次点击断点即可进行调试。 但是:NetworkIPAddr()回调将不再被调用。 我再也不能ping通它了。 我必须重置EVM才能使其再次工作。

很抱歉此POST的模糊性,但它不是一个非常可重复的序列,我不理解如何停止和重新启动调试会话,而不必每次都执行网络示例的EVM重置。

Mike

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

    在设备上加载和运行代码时,一个重要的考虑因素是与开机或冷重置相比,它对其状态的影响程度。 当涉及以太网PHY等外部设备时,这一点就更加重要。

    考虑到这一点,可以多次将Hello world等更简单的代码重新加载到设备,而不会对结果产生重大变化。 当更复杂的代码(如Nimu_emacExample)修改外部外围设备时,后续的重新加载可能起作用或不起作用。 这取决于代码是否正确地重置PHY或假定其来自通电状态,或者PHY实际上需要重新通电才能正确初始化。 我很久以前用了NDK,通常是后者。

    返回到如何正确启动和终止调试会话:修改代码并重新测试时,您可以采用以下几种方法:
    -如果您使用的是独立调试探头,则可以通过菜单“运行”-->“断开目标”断开核心(或多个核心)的连接,关闭并重新打开主板电源,然后重新连接(菜单“运行”-->“连接目标”)并重新加载代码(菜单“运行”-->“加载”-->“加载程序”)。 这最接近终止调试会话,但在终止/启动过程之间没有延迟。
    -如果您使用的是嵌入式调试探头,有时重启电路板会使您完全断开连接(您可以对此进行测试以查看它是否会影响此情况)。 在这种情况下,您可以断开一个或多个核心,发出设备或主板重置,重新连接核心并重新加载代码。
    使用任何调试探测器,您都可以修改代码并将其重新加载到核心(菜单“运行”-->“加载”-- >重新加载程序),或者,如果不需要更改代码,并且您只想重新开始,则只需从代码入口点(菜单“运行”-->“重新启动”)重新启动,或者使用软重置(菜单“运行”-->“重置”-->选择某些重置)。 使用这些选项后,后续运行不起作用的几率会更高。 另外,不要忘记任何重置都将撤消许多其他配置,如PLL或DDR/EMIF -您需要重新运行执行板/设备初始化的GEL脚本,对于A15,它是菜单脚本--> Global_Default_Setup

    如果您正在切换目标或配置,其他任何功能无法正常工作或您在一天结束后回家,通常会使用终止按钮:)

    使用多核设备时,您还可以查看下面的短剪辑,它有助于将多个内核加载到多个设备。
    https://youtu.be/tl-yal3rTqY

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

    问题是,如何正确终止并重新启动/调试? [/报价]问题在于Cortex-A15的SYS/BIOS程序,SYS/BIOS启动代码试图使缓存失效,但 Cortex-A15将失效指令视为干净/无效指令。 最终结果是:

    A)如果您重置EVMK2H,例如使用BMC串行终端的reboot命令,则可以成功下载并运行Cortex-A15的SYS/BIOS程序,该程序将启用处理器高速缓存。

    B)如果您终止调试会话,然后在没有重置EVMK2H的情况下启动另一个调试会话,则程序会崩溃,因为试图使高速缓存失效的SYS/BIOS启动代码实际上会将高速缓存中的某些陈旧数据从上次运行刷新到内存。 这会损坏内存中程序的内容,导致崩溃。

    请参阅 ARM Cortex-A15是否由于设计决定或勘误而将无效指令视为干净/无效指令? 了解一些背景信息。

    我的解决方案是在启动调试会话之前重置EVMK2H。 这很慢,因为每次都必须运行GEL脚本初始化。

    [引用user="Mike Dannhardt]我不介意上述所有内容,但我的下一个项目是Nimu_emacExample_EVMK2H_armBiosExampleProject。 我第一次从冷启动开始运行时,它就能工作。 我可以从提供的winapp测试应用程序testudp.exe ping它并执行UDP回显(它运行到失败为止:testudp:大小为1455时失败)。我可以重复此问题,大小为1455时testudp失败。 我还发现另一个udpSendReceivive程序在大小为1454时工作,但在大小为1455时失败;在这种情况下 ,Nimu_emacExample_EVMK2H_armBiosExampleProject示例从不回送数据大小为1455 (或更大)的UDP数据包。 怀疑示例(或NDK)有问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢拉斐尔和切斯特 我可以断开内核连接,通过BMC终端发出重启,重新连接(运行GEL),然后下载我的版本以重新运行。 比我以前做的要好得多的方法。

    Chester-感谢您使用此示例确认UDP故障。 因为我将使用TCP,所以我根本没有研究过这个问题。

    Mike
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    上述方法似乎存在的一个问题是System_printf()在调试会话的后续运行中不再起作用。 我可以看到System_printf()数据仍然进入SYSMIN输出缓冲区,并且在BIOS_EXIT()上清除缓冲区,但它不再进入7.2 的控制台窗口。 我必须从启动目标配置开始执行完全终止和重新启动。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Mike,

    System_printf()的工作方式与常规printf()类似,并且在代码加载期间设置了SW断点-我怀疑在软重置期间这被清除/禁用。

    其他一些详细信息如下所示:
    e2e.ti.com/.../228.4591万

    我仍在检查重新启用这些断点的方法,而不必重新启动调试会话或重新加载代码。 如果我找到任何东西,我会回来的。

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

    System_printf()的工作方式与常规printf()类似,并在代码加载期间设置了SW断点-我怀疑在软重置期间,此设置被清除/禁用。 [/QUOT]我没有尝试过,但可能取消选择"允许使用软件断点"选项以强制使用硬件断点将解决问题:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢切斯特 我尝试取消选择“允许使用软件断点”,然后从头开始(新的EVM开机),启动目标配置,加载GEL,然后连接到ARM0。 在控制台上加载并运行了带有Good System_printf()输出的应用程序。 已断开ARM0,重置EVM电源,重新连接,重新加载我的应用程序并运行。 应用程序工作正常(按预期工作),但不能打印到CCS控制台。

    我需要对EVM进行电源循环并重新启动目标配置,以便在控制台上显示打印结果(如按下红色终止方形菜单栏按钮)。

    我很欣赏这项建议。

    Mike