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.

[参考译文] TMS570LS3137:确定空函数指针/无栈信息的位置

Guru**** 2545590 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1332382/tms570ls3137-determining-the-location-of-null-function-pointer-no-stack-info

器件型号:TMS570LS3137

您好!

我们的项目运行了大约700ms、然后 PC 似乎自发变为0x00000000、因此程序有效地反复重新启动。 我们将 BP 设置为0x0、然后在~700ms 后达到该值。 然而、调试器中未显示任何堆栈帧来向我们显示 PC = 0x00000000的上下文。

我们消除了重置作为原因、我的同事最终发现原因是一个空函数指针、但经过了数小时的工作后才发现。

1) 1)在空函数指针将 PC 更改为0x0的情况下、为什么没有任何栈信息?

2) 2)是否有替代调试技术来确定哪些代码会将 PC 更改为0x0? 遗憾的是、我们没有任何片上/片外跟踪设备。

非常感谢。

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

    尊敬的 Kier:

    使用此信息很难找出问题的根本原因。

    是否有可能在我的最后为调试问题提供一些最简单的代码。

    此外、如果您使用 HDK 板、我们会发现有关 HDK 板用于看门狗复位的一个有趣观察结果、请参阅以下常见问题解答以了解这一点:

    (+)[常见问题解答] TMS570LC4357:如何使用数字看门狗-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    此外、在将其清零前还要尝试校验 SYS 异常寄存器的准确值。

    从代码中可以看到、我们在验证启动文件中的复位原因后就会清除异常寄存器。 因此请在152行之前进行验证、如上所示。

    --
    谢谢。此致、
    Jagadish。

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

    非常感谢 Jagadish。

    这是自定义硬件、而不是任何开发板。

    我们消除了复位的原因、并证明了它是一个空函数指针。 这很难跟踪、但现在我们已经修复了它。

    为了避免将来出现同样的问题、我们想知道如何查找任何空函数指针解引用的位置。 目前、堆栈帧仅显示0x00000000、没有其他信息。 我们的目标是以某种方式改善这一点。

    我们将尝试通过代码片段来演示该问题。 、因为只有您有硬件、您可以通过插入空指针问题并提供(空)堆栈框的代码片段和屏幕截图来演示这个问题吗?

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

    尊敬的 Kier:

    就我所知、我们可以通过两种方式识别空函数指针。

    1.一种方法是在表达式窗口中添加函数指针,需要验证为其分配的值。

    如您所见、如果我们没有分配任何值、那么相应的函数为 NULL 值。

    2.在 RESET 条目处设置一个断点并运行代码,如果我们的应用程序命中该断点,则验证 R14和 LR 寄存器值。

    这两个寄存器值将提供与最后一次执行更接近的地址。 实际上、这些寄存器将保存要执行的下一个地址、但不幸的是、我们会跳过该执行、但仍然保留这些值。

    现在、打开反汇编窗口并在其中输入该值、然后查看其附近的函数。

    --
    谢谢。此致、
    Jagadish。

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

    谢谢你的建议 Jagadish!

    1)我们不知道哪个函数指针可能为空,所以除非我们观察程序中的所有函数指针,我认为这不是一个实际的主张。

    2)这看起来是最好的方法。 我们将在下一次它发生时寻找它。

    再次感谢。