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.

[参考译文] LAUNCHXL-CC1312R1:CCS 调试帮助

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1421780/launchxl-cc1312r1-ccs-debug-help

器件型号:LAUNCHXL-CC1312R1

工具与软件:

Hejjo,

作为 CCS 的新手、我需要论坛的帮助。

我调试的是 nortos 项目、运行起来很奇怪。 程序在 FaultISR 中结束。 当我尝试通过连接到 SPI 的 enc28j60上的以太网发送数据包时会发生这种情况。

我过去在许多平台上进行过调试、但没能找到工具/如何使用它们。 我需要的是堆栈跟踪、以便可以看到此致命错误发生在哪里。

程序运行了几个小时,小包(60字节),但每隔一段时间,它就会碰到 faultisr ,总是在一个较大的包(183字节)上,我一直无法预测何时以及如何发生这种情况。

如何在崩溃时显示堆栈指针? 寄存器内容?

崩溃后如何转储堆栈?

如何进行所需的侦探工作?

我对 ARM 架构或汇编语言没有问题...但是工具在哪里呢?

由于数据包大小似乎触发了这种情况、并且我的缓冲区大小合适、因此我想在支持非 RTOS 代码时有一些操作会导致这种情况。 因此、尝试增加堆栈大小可能是一个不错的尝试。

我的 CCS 是12.8.0.00012、这发生在 LAUNCHXL-cc1312板上、但也发生在我自己的板上。  

此致、

Gullik

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

    尊敬的 Gullik:

    您是否看到了调试指南? 这里有很多有用的信息、包括关于 CCS 和串行接口调试指南:

    https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_7_41_00_17/docs/proprietary-rf/proprietary-rf-users-guide/proprietary-rf-guide/debugging-index.html

    特别是对于寄存器、您可以使用"Register"视图。 只需在 CCS 中搜索寄存器即可。  

    谢谢、

    Marie H.

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

    谢谢 Marie H、

    至于寄存器、我已经看了一下。 我可以看到 SP 以及 xPSR、也就是0x61000003、我使用 MSP 将其解释为异常3。 SP 位于堆栈的中间、但整个堆栈都处于中间

    一直向下到_stack 的过程都用数据填充、高于_stack_end all 为零。

    我一直在搜索项目属性、即在何处设置堆栈分配、但项目确实如此

    没有任何属性(灰显)、工具配置文件没有帮助...

    编辑:太简单 course....increasing 的.lds 文件堆栈会导致上的空白区域更大

    很糟糕……但我还是得到了 FaultISR。 我需要了解故障堆栈跟踪。。

    有趣的是、我有外部以太网适配器、可以长时间运行 ping、但不能

    处理长数据包。 我可以看到它们被发送、但在我得到 FaultISR...

    此致

    Gullik

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

    检查 CPU_SCS_CFSR 寄存器将得到0x00000400、我猜这意味着什么

    ufaultSTAT 寄存器第10位、ARM 文档指出为"未使用"

    编辑:我在 cc1312手册中查看了这项内容、但其中显示未使用。 我怀疑

    它是为这种特定的 Cortex 变体添加的。 它表示为"保留"。

    发生故障的 PC 应该是0x536d1、其中包含0xe7fe。

    作为指令、这意味着" b self"、即 FaultISR 处理程序中的代码。

    这是在一个以 localProgramStart 开始和结束_fini 的段中。

    我在 simplelink 套件中发现这个问题、

    剪切:

    /*调用应用程序入口点*/

    main();

    /*如果出现返回信号错误*/

    faultISR();

    现在,是什么让我们离开 main (在我的情况下是 while (1){ code })?

    困惑…

    Gullik

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

    尊敬的 Gullik:

    除非您已禁用中断(关键部分)、否则在中断即将发生时(在本例中为故障中断)、处理器将离开主中断。

    谢谢、

    Marie H.

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

    嗯、我已经了解了很多有关 cc1312调试的知识。

    我已经分析了几次堆栈转储。 这有点乏味、因为我相信考试可能是自动进行的、但我已经手动完成了。

    这些代码基于 simplelink 套件中的 rfUARTbridge 示例。

    我的堆栈如下所示:

    0x20002268 r0
    0x0000008F R1
    0x00000000 R2
    0x20003978 R3
    0x0000000A R4
    0x0004C1FB R12
    0x0004B3FE PC
    0x6100020E xpsr          手册说尾部 E 是含义为 PendSV 的中断编号

    表示一个"OS"中断 200表示保留的位7-9。

    被迷住了

    Gullik

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

    为了完成该线程、我发现了问题、我不确定这是如何触发堆栈的

    检测到故障、但实际上是由错误的 memcpy()引起的。 遗憾的是、我们一直在变窄

    关于这个问题是以业余的"printf"方式完成的,而不是对碰撞轨迹的良好分析。

    感谢 Marie H 提供的帮助、

    Gullik