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.

[参考译文] RM57L843:复杂调试问题-似乎忽略了函数调用。

Guru**** 2526730 points
Other Parts Discussed in Thread: RM57L843

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1285520/rm57l843-complex-debugging-issue---function-call-seemingly-skipped-over

器件型号:RM57L843

您好!

我将 RM57L843 CCS 12.5.0.00007与 TI V20.2.7.LTS ARM 编译器 LE 一起使用。

我必须调试应用程序、因为我们确定在某些系统级验证测试中没有调用一个看似微不足道的函数。

下面显示了我的函数调用图像。 我将传递一个 U32、U8、U32和一个指针。

我还注意到 CPU 应该分支到我的函数之前的反汇编列表

当我进入 C 语言代码窗口时、函数不会被调用、而我的光标位于调用函数的末尾:

需要注意的是、相关函数似乎是在闪存地址0x60处链接的第一个函数:

我们的测试知道、 目标函数调用内的结构没有更新、因此即使在运行期间(即没有连接调试器)、我们也可以在系统级别看到函数未被调用。

调用函数是在经过一些冗长的栈调用之后输入的、我不确定这是否会导致问题、但具有相同调用方法和调用深度的其他函数可以正常工作。 (通话深度不是太大)

当我进入分解窗口时、使用指令步进模式、CPU 将进入我们的函数

但该函数的实际代码来自另一个模块(上面显示的代码实际上是以太网驱动程序的一部分)、我一进入该目标函数、就好像堆栈消失了或 CPU 丢失了。

链接器堆栈大小为0x3000、当前堆栈指针为0x080023D0、因此我认为不会出现堆栈溢出(也没有理由在函数调用之间传递大量内存)。 我不是在中断上下文中、这是一个成熟的代码库、而且问题是可重复的。

因此、请寻求 TI 的一些帮助、以了解哪些领域可能导致这个问题、而不是在安全 CPU 中。

谢谢!

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

    您好、TI!

    我们的常规项目包括一个应用项目和一个库项目、库项目 包含我们的通用代码、所以 libary 保持静态。

    在调查上述错误的过程中、我多次重建了库和应用程序。

    但是、为了纠正上述误差、 已删除 库工程的 Debug 输出文件夹已重建、现在我们的系统可以按预期运行。

    我只能假定其中一个目录中的过时对象文件导致了问题?

    然而、由于我们大约有200个库项目、并且只有2000个固件项目、其中许多项目都用于关键应用、我们如何确保这种类型的问题不再发生?

    正在寻求 TI 的一些帮助、以了解为什么代码可以成功编译、但可能会生成错误的可执行代码、这大概是由于 Debug 文件夹中存在过时的东西。

    谢谢。

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

    尊敬的 Stomp:

    很抱歉我的回复延迟了。 在这段时间里,我一直在担心其他的问题。

    但是,要更正上述错误, 已删除 这两个库项目的 Debug 输出文件夹已重建、现在我们的系统可以按预期运行。

    很高兴听到在删除调试输出文件夹并重新编译工程后、该工程会按预期工作。

    我只能假设这些目录中的某个目录中存在过时的对象文件导致了问题?

    是的,你是对的,我也怀疑相同。

    然而,由于我们有大约200个库项目,而只有2000个固件项目,其中许多项目是在关键应用程序中,我们如何确保此类问题不再发生?

    仅仅看项目就很难判断这种类型的问题。

    我只需给您一个快捷方式、即可删除所有工程中的输出文件夹、然后点击一下即可重建所有工程。

    第一步、您只需在 CCS 中导入所有必需的项目。

    第二步是在 CCS 中选择"干净"构建选项。

    现在点击"Clean all projects"复选框。

    然后现在单击"清除"按钮。

    此选项的作用是删除所有工程中的调试输出文件夹、并从头开始重建工程。

    --
    谢谢。此致、
    Jagadish。