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.

[参考译文] TM4C + Nonos+lwip 超时问题

Guru**** 2618835 points

Other Parts Discussed in Thread: TM4C129ENCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/778709/tm4c-nonos-lwip-timeout-problem

主题中讨论的其他器件:TM4C129ENCPDT

您好!  

我遇到问题、我使用 TM4C1294+非操作系统+LWIP。
由于原始设置会使 TCP 传输速度变慢、
我调节到5ms、代码如下:(尽管这种调整真的很糟糕)

tcp_impl.h

#ifndef tcp_tmr 间隔
//#define tcp_tmr 间隔250// TCP 计时器间隔(以毫秒为单位)。 //
#define tcp_tmr 间隔5
#endif // tcp_tmr 间隔*/ 

在  lwIPServiceTimer()中,还有每5ms 轮询 sys_check_timeouts()。

目前、每5~10ms、PC 就会与电路板通信一次、并且大多数都运行良好。
但大约一个小时内将出现超时。 (Wireshark 如下所示)

(1) PC 向电路板发送查询命令。
(2)董事会回复 ACK
(3) PC 软件无法等待响应数据、执行关闭连接

我是否可以问可能会发生什么情况?

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,咖啡因
    我们不是 LwIP 的专家、因此不确定为什么较短的计时器间隔会导致问题。 您是否尝试过其他时间间隔? 您会从250大幅变化到5ms。 我建议您尝试使用不同的时间间隔、并找出通信仍然在哪个最小时间间隔工作。 通过这样做、我们可以在某种程度上隔离问题是否更加偏心或硬件。 我建议您也联系 LwIP 以获取支持。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这篇文章可能包含一些有用的内容、因为它讨论了不带 RTOS 的 TM4C129ENCPDT 上的 lwIP:

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

    您好、12月12日下午、

     非常感谢您分享这篇文章。 我也从中学习。

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

    感谢您分享经验、让我学到很多。
    您是否会将 lwIPEthernetIntHandler()移到 SUPERLOOP 进行轮询,其主要目的是获得更好的性能?

    此致、

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

    好的、感谢您的建议。

    此致、

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

    [引用用户="Caffein Lin]12时12分、

    感谢您分享经验、让我学到很多。
    您是否会将 lwIPEthernetIntHandler()移到 SUPERLOOP 进行轮询,其主要目的是获得更好的性能?

    此致、

    咖啡因

    [/报价]

    你好,Caffein

    主要目的是在时间要求严格的系统其他部分获得更好的性能。 以太网服务的优先级在我们的应用中不太重要。

    希望这对您有所帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,咖啡因
    您是否曾尝试找出问题在多长时间开始出现? 在我看来、您似乎遇到了一些瓶颈。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    很抱歉耽误你的回答。
    由于它是不时发生的、有时在超时发生前需要一天或两天。
    目前、电路板正在进行网络通信测试。
    测试结束后、我将找出问题发生的时间间隔。

    谢谢。

    此致、

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

    你好,咖啡因

    如果为 TCP 启用 LWIIP 调试 UARTprtintf()消息(lwipopts.h),则会看到 (等待超时)有时可能会在5ms 的较短时间内发生。 似乎(lwiplib.c)也无法处理 OOSEQ 超时清除。 我在下面添加了一个电话、以检查 LWIP 似乎忽略并再次减慢计时器的状态。 序列外的数据包永远不会得到 ACK 响应、 TXD pbufs 曾经被分配过。 您可以尝试 通过 Telnet 和其他 RDP 协议加快(禁用 Nagle)传输速度,例如,您的客户端 PCB 指针->flags |= TF_NODELAY。

    发生的情况似乎是、没有远程同步响应与  从内存池获取的分配 pbuf 的丢失帧有关。 这也可能导致丢失帧消息、 我们需要 回收(pbuf=Null)内存空间或最终使 TCP 堆栈崩溃。 不清楚 LWIP1.4.1是否正在执行调用以回收 OOSEQ 内存空间,但似乎没有。 在 下面添加呼叫后、等待超时消息似乎更少。

    /*定期检查 LWIP 超时。 尝试回收内存空间
    *来自排队的序列外 TCP 数据段。
    *将元素放回其池中。 当时、释放 OOSEQ 队列 PBUF
    *当 PBUF_POOL 为空时、PBUF_CHECK_FREE_OOSEQ = 1 (pbuf.h)*/
    #if LWIP_TIMERS
    if ((g_ui32LocalTimer - g_ui32LwipTimeoutTimer)>= MEMP_NUM_SYS_TIMEOUT)
    {
    G_ui32LwipTimeoutTimer = g_ui32LocalTimer;
    sys_check_timeouts();
    }
    #endif 

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

    GPTM 5ms 中断使 LWIPTimer (5)轮询信标递增@25ms。 您可以调整 TM4C129_HAL 中断处理程序所需的周期数(lwipopts.h) host_tmr_interval。 我有两个 TCP 堆栈、LWIPTimer (5) 25ms 间隔运行良好。 LWIP 计时器很难调整、但可以通过对两个间隔进行简单调整来将较高的应用 NVIC 优先级网状化。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 BP101:  

    感谢你的答复。 关于对 sys_check_timeouts()的调用,我看到 e2e 发布的文章中已经解释过它已被添加。 添加后、超时效果会得到改善。
    我稍后将在建议中尝试禁用 Nagle。

    非常感谢您的建议、因为我在 e2e 上看到您发布了大量有关 tm4c129 + LWIP 的文章。

    谢谢。

    此致、  

    咖啡因

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

    关于您的 tcp_tmr 间隔= 325毫秒设置、如果有数据要发送、似乎需要很长时间(100毫秒级别)才能将其发送出去。
    是否必须调用 tcp_output()来立即进行数据传输?
    (因为我的当前应用需要立即响应数据。)

    我仍在学习 LWIP 相关技术。 如果我提出一个不正常的问题,请原谅我。

    谢谢。

    此致、

    咖啡因
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,咖啡因
    感谢 BP101、我希望他能提供一些对您有用的指导。 我想知道您是否也有机会联系 LwIP? 由于我们不是 LwIP 复杂性方面的专家、我认为他们可以从 TCP 堆栈的角度提供一些改进性能(即降低传输延迟)的提示。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Charles Tsaaaa">您好咖啡因、
    感谢 BP101、我希望他能提供一些对您有用的指导。 我想知道您是否也有机会联系 LwIP? 由于我们不是 LwIP 复杂性方面的专家、我认为他们可以从 TCP 堆栈的角度提供一些改进性能(即降低传输延迟)的提示。

    [/报价]

    lwIP 设备最可能会告诉您的第一件事是、我们需要更新到最新的上游 lwIP、即版本2.1.2。 然后、性能改进可以追溯到上游。 如果我们可以创建一个 lwIP 的 TivaWare 端口、这样我们就可以使用常用(未修改的)上游 lwIP、那么 lwIP 的未来更新将不需要在 TM4C 上使用额外的工作。

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

    尊敬的12月12点和咖啡因:
    目前没有计划将最新的 LwIP 版本移植到 TivaWare。 如果您从 LwIP 获得的反馈要迁移到最新版本、您将自行完成此操作。 现在我将关闭。 如果您有新问题、您可以打开新主题。 如果您进行了一些改进、或者有发现/解决方法可与寻找相同解决方案的社区分享、您可以回复此主题。

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

    你好,咖啡因

    尝试禁用用于 tcpout()的 Pbuf 指针中的 Nagle 协议将   通过 TM4C_129.c HAL TX 描述符 DMA 处理来加快数据包速率。   放入 环形缓冲器的数据包不应花费100ms 从 PHY 传输出去。  也可以  在5ms 间隔内从同一 LWIP 计时器调用对输出环缓冲数据包的调用。 您还可以在  指定用于处理 LWIP 数据包响应的 TCP 回调处理程序中设置数据包传输的优先级。

    //设置 TCP 连接优先级。
    tcp_setprio (PCB、tcp_PRIO_MAX); 

    发送实时 数据包的调用应仅 为  客户端 TXD 处理程序设置布尔开关并 快速 退出。 让 LWIP/HAL/DMA/PHY 计时器执行其余的数据包传输处理。  此外 、EMAC0/PHY 时钟速率必须为25MHz XTAL、否则 TXD 速度(Nagle 延迟)可能会受到很大影响。   

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

    感谢你的答复。
    我第一次使用 LWIP。
    我真的有很多需要学习的东西。
    如果有解决方案或改进、我将回复此主题。

    此致、

    咖啡因
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,咖啡因
    感谢您的更新。 我现在要关闭这个线程。 如果您找到解决方案或有任何新发现要与社区共享、您可以再次回复此主题。