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.

[参考译文] TM4C1294NCPDT:LWIP 1.4.1多个连接最终导致 PCB 列表损坏

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/789593/tm4c1294ncpdt-lwip-1-4-1-multiple-connections-eventually-results-in-corrupted-pcb-list

器件型号:TM4C1294NCPDT

我使用的是 TivaWare 2.1.4.178中的 LWIP 1.4.1。  我的固件一次允许五个连接。  我有一个客户端应用程序连接到 TM4C1294板并传输/接收少量数据。  在执行一些压力测试时、我会持续与固件进行多个连接、然后断开连接并重复执行、我注意到 LWIP 中的 ACTIVE_PCV_list 最终会使用自参考"下一个"指针损坏。  示例:

这会在 LWIP 的 tcp.c 代码中的函数中产生一个无限循环、在该循环中、函数尝试在其中显示活动 PCB 的列表。  为了确定活动 PCB 列表损坏的位置和时间、我修改了 LWIP 以便在列表修改后随时查找任何自参考"下一个"指针。  发生这种情况时、我设置一个断点。  在发生 tcp_REG_ACTIVE (npcb)后、我会在 tcp_in.c 的 tcp_listen_input 函数中持续看到它发生。  以下是调用堆栈以及第一次看到它已损坏时在 tcp_in.c 中的位置:

我花了很多时间来查看代码、并确保仅在 TM4C 的以太网中断期间调用 LWIP 函数。  我想知道其他人是否曾遇到过这个问题或类似问题、或对可能发生的情况有任何想法?  提前感谢。

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

    您能否看到增加堆栈和堆大小是否有助于解决该问题? 可能是溢出问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的建议、Ralph。 我将堆叠和头尺寸从16384增加到32768,增加了一倍。 但遗憾的是、在15分钟的应力测试后也出现了相同的问题。 :(
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Terence:

    我一直在与我们的以太网专家讨论这一问题、以便集思广益、提出更多想法。 遗憾的是、由于我们的器件专家多于 LWIP 专家、因此很难提出有意义的建议。 这不是以前出现的问题、比我们通常能够支持的更基本的 LWIP 问题更先进。

    我建议在查看问题之前、先调查是否必须建立的连接数量已截止、然后查看是否可以从该处跟踪根本原因。 或者、如果同步连接数量较少、则可能会查看连接数量是否足以满足应用需求。

    除此之外、要获得更详细的帮助、您应该尝试 LWIP 用户论坛、因为本主题确实需要比我们更有经验的 LWIP 实践者提供指导。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph -我感谢您的回复以及您与他人集思广益以提出一些想法的努力。  没问题、完全了解这与其说是 TM4C 问题、更是 LWIP 问题。  我已经在 LWIP 论坛上发布了没有太多反馈的帖子、并在这里发布了希望其他人也遇到过类似的情况。

    在进行更多测试后,它似乎与使用 tcp_close()关闭客户端连接有关。  我的应用程序将并发客户端连接的数量限制为5个、并关闭任何其他连接尝试。  在拒绝连接时、问题似乎在那里发生。  我认为调用 tcp_abort()可能更合适-仍在测试。

    再次感谢您的回答。

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

    我们会尽力帮助解决 LWIP 主题、很遗憾听到他们的论坛也没有提供任何其他内容。 也许这里的一个社区成员会遇到这个问题并有一个想法。

    如果您最终获得了解决方案、我们也有兴趣了解我们的知识并将其添加到我们的知识中(此外、未来可能会有其他社区成员遇到此问题)。

    同时,我将继续并在我的结尾关闭此主题,但如果您有另一个问题,您想向我们提出反馈意见,只需在此处回复,我仍会看到它:)