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.

[参考译文] TM4C1290NCPDT:DHCP 定时器故障、带有到 FaultISR 的分支

Guru**** 2535770 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1179374/tm4c1290ncpdt-dhcp-timer-fault-with-branch-to-faultisr

器件型号:TM4C1290NCPDT

你好

我们有一个具有35个板的系统、其中包含上述 ARM。

一天左右连接到以太网的板会丢失通信、我知道它属于 FaultISR、在调试时、我实际上在等待了几天后就看到了这一点。

当我转到寄存器时、我转到发生中断的位置、我看到了以下内容:

完全 不理解"分支 FaultISR "、因为这不是我在查看文件时所拥有的代码。

我了解到在重新检查 IP 时 DHCP 计时器中断中会出现问题、尽管 IP 不能更改、因为它是一个独立的系统

使用微周期处理 IP -不会改变。

为什么会看到 FaultISR  的这个分支?

是否从其他地方知道此问题?

当我遇到此故障时、我所做的是在闪存中保存寄存器在 PC 中添加2、如在 TI 示例中所做的那样并离开-它工作正常(发生时 -两次)

此解决方案是否正常?

Maccabi

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

    您好!

     我没有看到这样的问题。 虽然我不知道问题的根本原因、但我建议您尝试增加堆栈和堆大小。 也许在实验中、首先将堆栈/堆大小加倍、然后查看问题是否消失。 如果问题消失、则与内存管理有关。 然后、您可以 针对您的应用相应地调整堆栈和堆。 您是否也可以对不同的编译器优化级别重复同样的问题? 只是想知道它是否与编译器优化级别有关。  

     此应用手册对于诊断故障也很有用。  https://www.ti.com/lit/pdf/spma043

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

    谢谢

    堆栈大小是第一个要检查的问题-它的大小为8K。 我可以看到它的变化、它的需求要少得多-因此这不是问题。

    优化已关闭-我不使用它。

    我的谜题是分支 FaultISR 线的来源。

    Maccabi

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

    尊敬的 Maccabi:

     您能否显示 DHCP_F精细_tmr 函数及其调用函数的源代码? 我也不知道 BL FaultISR 的来源。 还请显示映射文件。  并提供您使用的编译器版本。 我认为这些信息将有助于我们 的代码开发团队、因为我将把您的帖子提交 给我们的专家征求意见。  

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

    dhcp_f精细_tmr()代码:

    调用它的代码为:

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

    我假设您使用 TI Arm 专有编译器进行构建、该编译器的可执行文件名称为 armcl。

    请反汇编由链接器创建的最终可执行文件。  反汇编器与编译器位于同一\bin 目录中。  命令类似于...

    armdis final_executable.out > disassembly.txt

    检查问题分支0x0000cf24地址处的反汇编代码。  这显示了什么?

    谢谢、此致、

    乔治

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

    你(们)好

    由于我在代码中进行了更改(与此问题无关)、行号发生了更改。

    在 c 中的调试器下、我们得到 正确的部分、在左侧是反汇编:

    从 armdis 输出中、我得到:

    考虑到所有电路板上的代码都是一样的、进入异常的电路板上有很多计时器中断、直到它被抛出异常、让我可以看到这个"BL FaultISR"命令。

    Maccabi

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

    我看不到编译器在哪里发生了任何错误。  无论导致该指令分支到 FaultISR 的原因是什么、都必须在代码构建和加载之后发生。  你同意吗?

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="488819" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1179374/tm4c1290ncpdt-dhcp-timer-fault-with-branch-to-faultisr/4441808 #4441808"]我的拼图是分支 FaultISR 行来自何处。

      上面 Charles 链接的应用手册 www.ti.com/.../spma043包含:

    您是否能够尝试执行上述应用手册中的诊断步骤?

    此外、在 CCS/TM4C1294KCPDT 中:如何在异常处理程序中使堆栈解开? 有关如何让 CCS 调试器解除堆栈以查找导致调用 FaultISR 的指令的信息。

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

    我使用该文档找到了异常发生的确切位置。

    我不知道为什么它是 TCP 堆栈的代码部分。

    它发生在这里

    #if LWIP_DHCP
    if ((g_ui32LocalTimer - g_ui32DHCPFineTimer)>= DHCP_Fin_timer_ms)

    G_ui32DHCPFineTimer = g_ui32LocalTimer;
    dhcp_f精细_tmr ();<===================

    #endif

    如上一封电子邮件中所示。

    我使用的是永久 IP、但一开始需要 DHCP。

    如果我为 执行 IP 检查的 DHCP_F精细 计时器毫秒和 LINK_TMR_INTERVALs 提供了非常高的值,则每周不会出现一次或两次问题。

     

    TIA

    Maccabi

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

    我完全同意。

    正如我写的 、我不理解我在调试器反汇编中看到的代码、其中包含命令–下图中显示的 BL FaultISR 以及我们在 c 文件中看到的代码。

    我仍然不明白"BL FaultISR"反汇编中的命令来自哪里。

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

    Time Hi、

     您是否有机会尝试 GEL 脚本来解压栈、以查找导致在这个后 的 CCS/TM4C1294KCPDT 中调用 FaultISR 的指令:如何在 Chester 提供的异常处理程序中解除堆栈的缠绕?

     前面我 想知道 如果你增加堆栈和堆大小(尝试将它们加倍以进行实验)、它是否会解决这个问题、你能否确认你已经尝试了这两种方法、结果是一样的?

     根据我对 lwIP 的理解、如果不能同时从一个 NIC 支持 DHCP 和静态 IP、这可能不是直接的。 对于 DHCP、您需要在 lwipopts.h 中将#define LWIP_DHCP 和 LWIP_AUTOIP 设置为1 但是、对于静态 IP、通常需要将两个宏都设置为0。 要同时支持这两种器件、我不确定从 lwIP 支架到哪个位置是正确的。 我假设您仍在 lwipopts.h 中将 LWIP_DHCP 和 LWIP_AUTOIP 设置为1 也许您可以在 lwIP 论坛上寻求最佳方法的一些指导。 尽管如此、我发现这篇文章似乎对海报起作用、并对代码进行了一些破解。   

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1171439/tm4c1294ncpdt-dual-static-dhcp-configuration-clears-static-ip-data-on-ethernet-link-up-lwiplib-c-in-tivaware