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/LAUNCXL-CC1310:CCS成功't将更改应用于PC/SP/LR核心寄存器

Guru**** 2579735 points
Other Parts Discussed in Thread: CC1310, SEGGER

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/597878/ccs-launchxl-cc1310-ccs-won-t-apply-changes-to-pc-sp-lr-core-registers

部件号:LAUNCHTXL-CC1310
主题中讨论的其他部件:CC1310,SEGGER

工具/软件:Code Composer Studio

您好,

我正在尝试调试硬件异常。

由于CCS不能回溯过去的HWi异常中断(它将异常单词错误为返回地址和扼流圈),我显然应该手动将SP/LR/PC从HWI/Exception信息复制到Core寄存器,以获取CCS给我回溯。

问题是,CCS经常断然拒绝更新寄存器-它在编辑模式下接受新地址,但当我按ENTER键时返回到旧地址,回扫不起作用。

如果我再次编辑该字段,新地址将以编辑模式显示,因此CCS显然知道我想要它是什么。 但是,按ENTER键后,地址将返回到旧地址。

有时,如果CCS随机允许我将PC更改为*不同*的地址,它会用存储在各自编辑模式中的值更新PC/LR,并且我可以在将PC放回其应有位置后获得回溯。 但在大多数情况下,CCS不允许我更新PC,因此回溯追踪仍然不可用。

这使得调试硬件异常几乎不可能,让我通过内存浏览器手动解析堆栈中的符号,并猜测它们是函数参数,函数局部变量还是返回指针。

我使用的是7.1 Studio版本:Linux. 0.0.0016万

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

    您好,

    Michael Moon 说:
    我显然需要手动将SP/LR/PC从HWI/Exception信息复制到Core Registers中,以获得CCS给我回溯。[/QUOT]

    您是否关注某种类型的文档? 如果是,您可以向我指出吗?

    Michael Moon 说:
    问题是,CCS经常断然拒绝更新寄存器-它在编辑模式下接受新地址,但当我按Enter键时返回到旧地址,回指追踪不起作用。[/QUOT]

    我假设您正在使用"注册"视图来尝试此操作。 我可以在Ubuntu上的CC1310 LaunchPad上使用相同的CCS版本接受我的更改。 我认为我缺少重现此问题的步骤。 您能否提供一些可重现的测试案例(可能是上述文档)?


    谢谢

    KI

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

    此过程的文档位于此处

    我认为我没有做任何特殊的事情来导致该问题,只是在固件中遇到(或触发)硬件异常,暂停调试,然后尝试将列出的三个寄存器值复制到核心寄存器窗格中,如上面链接的文档中所述。

    我非常希望CCS能够简单地识别错误标志并回溯过去,当然不会出现这些错误,但这似乎是我们目前所坚持的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    快速跟进,该文档指出这些步骤在较新的CCS版本中不是必需的,因为ROV任务查看器中提供了回溯跟踪功能, 但是,这不允许我像在主回溯查看器中突出显示堆栈框架时那样检查堆栈框架内的变量,因此检查堆栈框架内的变量仍需要手动复制这些值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [QUOTE USER="Michael Moone")快速跟进,该文档指出,这些步骤在较新的CCS版本中不是必需的,因为ROV任务查看器中提供了回溯,但是,这不允许我像在主回溯查看器中突出显示某个堆栈框架时那样检查堆栈框架中的变量, 因此,检查堆栈框架中的变量仍需要手动复制这些值。我之前曾报告过类似的问题,例如 CCS 6.1 Tm2是否可以将调试上下文切换到阻止的TI-RTOS任务?,但没有得到答案。

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

    如果我再次编辑该字段,新地址将以编辑模式显示,因此CCS显然知道我想要它是什么。 但是,按Enter后,地址将返回到旧地址。[/QUOT]我尝试使用运行在Ubuntu 16.04 LTS下的CCS 7.1 .0.0.0016万 重复此问题。 使用与Segger J-Link连接的CC1310,运行生成异常的TI-RTOS程序(测试异常处理)。

    出现异常后,问题再次出现,有时在尝试更改PC时按ENTER键后,SP或LR会将地址注册到旧地址。 但是,这似乎只是一个显示问题,因为如果随后在Register (注册)窗口上使用“Refresh (刷新)”按钮,则地址会显示更新的值,并且CCS调试窗口中的回溯记录会根据修改后的PC,SP和LR寄存器而改变。

    我认为,只有 在 Linux下运行CCS 7.1 .0.0.0016万 时,在按ENTER键后寄存器值恢复到原始值的问题才会出现,因为在  Windows 10下运行的CCS 7.1 .0.0.0016万 不会出现问题。

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

    由于CCS不能回溯过去的HWi异常中断(它将异常单词错误为返回地址和扼流圈),我显然应该手动将SP/LR/PC从HWi/Exception信息复制到Core Registers,以获取CCS给我回溯。[/QUOT]如果这样做有帮助, 我发现,当从 simplelink_cc13x0_sdk_1_30_00_06或 tirtos_cc13xx_cc26xx_2_21_00_06导入CC1310的示例时,.cfg文件中的硬件异常行为配置为:

    /*
    *当
    检测到硬件异常*时,以下选项会改变系统的行为。
    *
    *选择一个:
    *- hwi.enableException = TRUE
    * 此选项使默认m3HWI.excHandlerFunc函数完全
    * 解码异常并将寄存器转储到系统控制台。
    * 此选项会在错误模块中引起错误并显示
    * ROV中出现异常。
    *- hwi.enableException = FALSE
    * 此选项通过不解码或打印
    *来减少代码占用空间 系统控制台异常。
    * 但它仍会在错误模块中产生错误并显示
    * ROV中出现异常。
    *- hwi.excHandlerFunc =空
    * 这是节省代码占用空间的最积极的选择;但它
    * 很难调试异常。 它将闪存占用空间减少
    * 出现异常时插入默认While (1)陷阱。 此选项
    * 错误模块未引起错误。
    */
    //m3Hwi.enableException = TRUE;
    //m3Hwi.enableException = FALSE;
    m3Hwi.excHandlerFunc = null; 

    发现 (默认)选项m3HWI.excHandlerFunc = null 导致ROV HWi/Exception信息中报告的SP不正确;SP报告为0x30字节,小于异常点的实际值。 为异常捕获的SP不正确会导致ROV视图中的栈跟踪不正确,因此在栈跟踪中仅报告叶片和倒数第二个功能。 当PC / LR / SP寄存器从ROV异常视图复制到CCS寄存器时,CCS调试器中的栈回溯也不正确。

    更改以使用m3Hwi.enableException = true或 m3Hwi.enableException = false选项,则意味着SP寄存器在ROV异常视图中报告,因此ROV异常视图中的栈回溯已完成, 当PC / LR / SP寄存器从ROV异常视图复制到CCS寄存器时,CCS调试器中的栈回溯跟踪也已完成。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢切斯特的确认,很高兴这不仅仅是我!

    很高兴知道刷新按钮可以提供帮助,我下次会尝试-它会触发我的广告盲点,所以一开始没有看到它。

    在我的应用程序中,m3Hwi stuff设置为true,因为我想查看打印的或至少记录的详细消息,尽管知道空会破坏CCS的堆栈视图很有用