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.

[参考译文] RTOS/TM4C129ENCPDT:单步执行特定函数调用(例如 I2C_TRANSFERT)时的硬故障

Guru**** 2449140 points
Other Parts Discussed in Thread: TM4C129ENCPDT, TMP006

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/622553/rtos-tm4c129encpdt-hard-fault-when-stepping-over-certain-function-calls-e-g-i2c_transfer

器件型号:TM4C129ENCPDT

工具/软件:TI-RTOS

大家好、

使用 TIRTOS 为 TM4C129ENCPDT 处理器调试某些代码时遇到问题。  具体来说、我不能在没有异常(硬故障)和中止的情况下单步执行某些函数。  一旦发生这种情况、我就会在没有可用符号的地方离开。  我知道用异常转储中的值替换 SP 和 PC 的技巧、但在这些情况下、即使是这样、这些位置也没有符号。  

下面是一些其他有趣的数据点:

1) 1) 我可以不单步运行代码、看起来工作正常。

2) 2) 我可以在发生问题的函数调用之前和之后放置断点、点击第一个断点、然后运行到第二个断点、这样可以正常工作。  我无法单步执行函数调用、或者我获得上面提到的结果。

3) 3) 我以 I2CTransfer 为例、但也有其他情况。  我~~的共同点是 RTOS 在该函数调用期间重新安排。

4) 4)我正在使用 XDS100V2 JTAG 探针。

5) 5) 此工作使用专有硬件、但本质上它只是一个具有一些 ADC 和存储器外设的参考设计。

我最想的是、尽管我能够手动操作、但它与调试器在步进时放置其断点的能力有关。

有什么想法?  有什么建议?

恢复到串行或控制台输出进行调试非常困难且耗时。  此外、它还会带来自己的时序问题。

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

    您好、Stan、

      是否可以取消选中两个复选框并重试、是否可以看到它是否起作用? 在 TI-RTOS 问题中、我发现了一篇相关文章、谈到了同样的问题。  

      

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想我已经看到了这个线程。 我尝试取消选中"when source steping"框、但接下来会发生的情况是、下一个"step"会将您带到一些中断处理程序或某个东西、而不是单步执行源代码级函数调用
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    FWiw、当我尝试单步执行函数时、我得到的转储另一个线程中的 OP 完全相同:

    FSR = 0x0008
    HFSR = 0x40000000
    DFSR = 0x00000001
    MMAR = 0xe000ed34
    BFAR = 0xe000ed38
    AFSR = 0x00000000
    正在终止执行...

    当我取消选中两个复选框和 STEP 时、我会在这里结束:

    这里有什么东西我应该作为线索吗?

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

    抱歉、上次未能通过捕获。  当我尝试在未选中这些框的情况下单步执行时、我将在这里结束:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Stan、
    我将向我们的 TI-RTOS 专家寻求帮助、以了解他们是否可以提供指导。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Stan、

    在单步执行可能会阻止、然后再次异步启动的代码时、给出的调试器单步执行设置建议是正确的。 在这种情况下、不应在单步执行时禁用中断。 要解决此问题、您应该能够在要中断的下一行显式设置断点、然后运行到该断点。 如果您从未到达该位置、而是始终在中断调度程序中找到自己、那么我会怀疑有一个中断触发没有得到正确的处理(这意味着即使在 ISR 代码运行后、它仍然保持活动状态)、 或者中断以如此高的速率重复、以至于后台线程永远不会返回。

    如果 ROV 在 CCS 调试会话中工作、则当您暂停应用时、详细的"Hwi"视图将显示当前正在处理哪个中断(它将标记为"Enabled"已启用/处于活动状态)。

    如果 ROV 不起作用、则可以使用调试器的寄存器视图来确定所处理的中断的数量。 它包含在 xPSR 寄存器(即异常域)的最低有效8位中。

    在这种情况下、知道正在处理的中断号将有助于确定问题。

    Alan

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

    我不清楚你说"解决这个问题"是什么意思。 您是不是要在启用 INT 且我要单步执行该函数时避免降压到 asm? 如果我必须在我要单步执行并无论如何运行的行之后设置一个断点、那么我认为无论我是选中还是取消选中该框都无关紧要。 否?

    当我的代码在一个步进上熔断时(步进时禁用 INT)、我相信 ROV 告诉我 int #3是有效的、而 int 14是挂起的。

    当我取消选中该复选框以使 INT 保持启用并尝试单步执行该函数时、它会自动降压到 ASM 中、正如我之前所说的那样。 但我只是尝试了其他一些可能会解释它的东西:拔下以太网电缆时、它会顺利地越过它。 (再说一次、这是启用 INT 的情况。)

    那么、这可能只是我在该特定情况下看到的以太网 MAC 中断。 这有道理吗?

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

    您是否有机会看到我在9月5日的回复? 此外、我注意到 HWI 视图中的"详细信息"选项卡向我显示了一个中断、该中断具有一个仅名为__ASM__的函数、其优先级、组和子优先级为0。 当我检查显示的地址时、这里没有代码。 仅为零。

    是否有办法告诉我该条目来自何处? 它是否与我的问题相关?

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

    Stan、

    我看到了你之前的帖子、但我很失望、忘记回复了。 是的、通过"解决这个问题"、我指的是单步进入 ISR 代码的问题、而不是您尝试单步执行的下一行 C 代码。 您必须取消选中该复选框、以强制调试器在单步执行时不禁用中断。 我希望调试器在"运行"到断点时不禁用中断。  奇怪的是、您看到的问题最近被报告了、尽管在基础代码中没有进行任何更改、要求在步进超过8年时启用中断...

    如果未选中这些框、则如果在调试器暂停时触发中断、下一步将进入 ISR 代码、而不是您正在单步执行的下一行 C 或 ASM 代码。 通过拔下以太网电缆、我怀疑您所做的就是抑制麻烦的中断、从而允许单步执行而不中断。

    关于 ROV Hwi 详细视图、我认为这是一个问题、我们已经有一段时间没有构建 Hwi 对象了。 我们的 ROV View 代码正认真地尝试解释未构建的 Hwi 对象中的字段、从而导致 Hwi 对象内容的伪渲染。 更新了较新的 SYS/BIOS 版本(从6.50.00.10开始),以检测未构建的 Hwi 对象,而不是尝试对它们进行解码。

    Alan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我对使用 I2C 的 Tivaware 示例程序有类似的经验、例如 temperature_tmp006。 当我运行程序时没有问题。 但是、当我调试单步进入 I2C 函数时、会出现一些错误。

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

    至少我知道它不是特定于我的代码的内容。 )