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:对6416单核处理器的异常处理支持。

Guru**** 2587345 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/635090/rtos-exception-handling-support-for-6416-single-core-processor

工具/软件:TI-RTOS

我正在为部署在 C6416处理器上的应用开发崩溃帧工作、E2E 博客中的某些文章为红色、6416单核处理器不支持异常处理、

如果有异常处理、您 能帮助您了解如何实现6416处理器的异常处理功能。  

如果不可用 、则快速处理软件或硬件异常调试的其他可能方法。(假设快速标识最后一个被调用的函数)。   

请建议。

此致、

Hanumanth

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

    您是否正在使用 DSP/BIOS? 如果是、版本是什么? 您是否在 BIOS/DSP 用户指南中查看了异常处理的描述?

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

    Hanumanth、

    在这里的重复主题中 、您提到了2个不同的器件型号。 我认为 C6416是正确的、但请澄清一下、在我们继续这么做之前、我们会做得太远。

    在从 C6416中的 C64x 内核升级到 C6455中的 C64x+内核(以及更高版本的内核、例如 C674x 和 C66x)之前、我们的 DSP 系列不包含 CPU 异常处理、例如针对无效程序/数据访问或无效指令代码的 CPU 异常处理。 因此、C6416器件不能进行异常处理。

    如果没有额外的帮助、则很难对主要异常事件进行故障排除和调试、即使通过异常处理也很难做到。 调试方法因故障的性质、发生频率、可重复性、一致性等而异。

    请描述这种情况、以便我们为您提供最适合您的故障情况的调试建议。

    一些想法是:

    1.在发生故障并控制仿真控制下的器件后、找到堆栈指针的值并查看堆栈末尾附近的存储器位置(地址稍高)、以查看是否有任何值看起来像程序空间地址。 其中一个可能是最近函数调用中保存的返回地址。 您可以查看堆栈上的其他位置、看看它们如何与堆栈框如何组成应用中的各种函数进行比较、从而了解程序可能崩溃的位置。

    我最喜欢的工具是创建循环缓冲区、在应用程序运行期间定期将信息保存到其中。 在输入10个不同函数时、可以使用1-10之间的简单数字来表示其中一个函数。 然后、一些其他值可能与这些值一起存储、以形成显示历史记录的值的"结构"。 发生故障并控制仿真控制下的器件后、找到循环缓冲区中的指针位置、并确定故障发生前执行的最新函数。 这可能有助于找到适合测试断点的位置。

    3.最后,您将尝试缩小故障位置,并将断点设置为尽可能靠近该位置。 如果您可以执行此操作、然后单步执行、直至发生不良情况(例如分支到无效的程序空间)、那么您将更接近查找故障源。

    此致、
    RandyP

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

    您好!

    感谢您的快速回复。

    我们的应用程序部署在6416单核处理器 DSP/BIOS v5.20.00  版上、即(BIOS_5_20_00_22、CGT_C6000_5.1.0)。 我已经查看  了 BIOS/DSP 用户指南、我没有获得 有关6416异常处理的重要信息、如果您有任何想法、请分享。

    提前感谢。

    此致、

    Hanumanth

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

    您好 RandyP、

    感谢您的详细解释和建议、
    是的,我的器件型号是 C6416,感谢您明确确认 C6416中此 C64x 内核上的异常处理不可用性。
    是的、我们将研究调试可能的想法、
    至于您的指示、我们在6416上部署的应用的想法1和3是完全自定义的、紧密集成在盒子中、我们无法连接 JTAG、无法控制受仿真控制的器件、我们无法使用断点方法进行调试、

    想法2: 我想说的是、由于我们无法连接 JTAG 并且无法在仿真控制下控制器件、但我们可以在每个时间间隔内将缓冲器(具有函数级或任务级信息)从系统模块中拉出并使用 SRIO 或以太网、 获取最后一个数据包并检查每个阶段的值,将有助于我们指出系统模块中最后一个任务或功能,因此我们可以通过某种方式指出软件崩溃的根本原因。

    请让我再了解一下建议、


    再次感谢、
    Hanumanth