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:TCP服务器在工作了许多小时后不响应来自客户端的ping

Guru**** 2611705 points
Other Parts Discussed in Thread: TM4C1294NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1084577/tm4c1294ncpdt-tcp-server-does-not-respond-to-ping-from-client-after-many-hours-of-working

零件号:TM4C1294NCPDT

CCS:8.3 Tm1.

NO_SYS (未使用RTOS)

我们开发了一个带有以太网TM4C1294NCPDT的自定义主板,并  通过   修改回送服务器示例,使用LWIP 1.4 实现了TCP服务器。

不使用以太网中断,所有以太网 操作都是通过在 程序的主循环中调用lwIPEthernetIntHandler();来完成的。

与客户端PC的连接正在通过交换机进行。

固件 响应来自客户端 PC的Modbus请求。有多个此类板连接到交换机。 客户端是运行ModbusPol程序的Windows 10 PC。

在lwipopt.c中,速度被强制为10Mbs。

它在很多小时内正常工作,但过了一段时间后不响应客户端。 即使ping失败。 摆脱这种局面的唯一办法是重置微控制器。

工作方案如下:

运行Modbuspol的PC连接到板 上以检查运行情况, 然后断开连接(在运行时拔出电缆)。

几小时后 ,电缆重新连接,ModbusPol再次运行。 大多数时候都正常工作。 但是,微处理器有时甚至对来自PC的ping也不响应。

TM4C1294NCPDT上的固件继续运行以执行其余的作业(如写入SD卡,读取输入等)。  

我们尝试了以下解决方法:

1.检查电缆是否已插入。

2.如果已连接,请检查是否在ECHO_SEND函数中发送了任何数据。  

3.如果在ECHO_SEND函数中30秒内没有发送数据,请 使用  SysType.Reset()执行软件重置;

这可以正常工作,但 不是理想的解决方案,因为它会干扰 程序的其他功能。

我有以下问题:

1.程序运行时是否可以拔出电缆?

2.我们是否可以解决 在没有  SysType.Reset()的情况下重启服务器的问题?

  是否需要调用 netif_set_down和 netif_set_up函数以从情况中恢复?

 3.我们可以给 LwIPInit(.)打电话吗?  在同一程序中多次运行?

是否有人建议如何调试程序?

我是Wireshark的新手,但 我正在尝试了解  PC端的情况。

感谢你的帮助。

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

    您好Krishna:

    我们的以太网专家目前不在办公室,周三将返回,我需要听从他在这一主题上的专业知识,并在他回来讨论这一问题时与他跟进。

    此致,

    Ralph Jacobi

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

    您好,

     我不熟悉Modbus,所以如果问题与您的Modbus堆栈有关,我真的无法帮助您。 您在运行回波示例时是否遇到任何问题,与您对Modbus应用程序执行的操作相同,例如断开电缆并重新连接? 是否可以在不发现 问题的情况下运行数小时/数天(例如无法ping)?

    1.程序运行时是否可以拔出电缆?

    [/引述]

    我认为是这样。

    2.我们是否可以解决 在没有  SysType.Reset()的情况下重启服务器的问题?

    [/引述]

     如果只想重置EMAC和PHY,则可以使用 SysConcessalReset()仅重置EMAC和PHY。

    SysCtlPeripheralReset(sysctl_Periph_EMAC);
    SysctlPeripheralReset(sysctl_Periph_EPHY);

     3.我们可以给 LwIPInit(.)打电话吗?  在同一程序中多次运行?

    [/引述]

    我 从未尝试过, 我认为您不想这样做。 我不知道多次初始化网络堆栈的效果。  

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

    您好,Charles:

    </s>200.4049万

     如果只想重置EMAC和PHY,则可以使用 SysConcessalReset()仅重置EMAC和PHY。

    SysCtlPeripheralReset(sysctl_Periph_EMAC);
    SysctlPeripheralReset(sysctl_Periph_EPHY);

    [/引述]

    我尝试了以上方法,但它给出了与我们尝试解决的问题完全相同的问题,即没有响应ping。 在进一步的研究中,我发现上面的内容已将MAC地址设置为所有的FF,这说明了ping不起作用的原因。  

    接下来,我尝试使用将IP地址设置回现有地址  

    lwIPNetworkConfigChange 函数。

    这会关闭网络接口并将其重新添加。 这似乎是一个合理的变通方法,因为它不会干扰应用程序的其他部分。 此外,我还添加了一个补丁程序,用于在挂起事件发生时将lwip状态(如IP地址,MAC地址等)存储到SD卡上,以便我们可以了解导致问题的原因。

    我们需要等待几天,问题才会出现,我会更新进度。

    谢谢你。

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

    顺便提一下,几年前在这些论坛上讨论了一个类似的问题

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/57.5366万/tm4c1292ncpdt-lwip-1-4-1-stack-stops-responding-after-multiple-hours-of-tcp-communications</s>1292

    在讨论结束时,我无法找到解决问题的办法。 我是否错过了一些东西?

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

    您好,Krishana:

    24日,

    请告诉我们变通办法是否有效。  

    1294 man-hour-working-hour-work/4022833]在402.2833万在#402.2833万中找不到任何解决方案。 我是否错过了一些东西?[/QUOT]

    最后一个帖子是Amit要求尝试使用MEM_SIZE进行64K,而不是在OP的lwIP配置中尝试16K。  

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

    接下来,我尝试使用将IP地址设置回现有地址  

    lwIPNetworkConfigChange 函数。

    这会关闭网络接口并将其重新添加。 这似乎是一个合理的变通方法,因为它不会干扰应用程序的其他部分。 此外,我还添加了一个补丁程序,用于在挂起事件发生时将lwip状态(如IP地址,MAC地址等)存储到SD卡上,以便我们可以了解导致问题的原因。

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

    使用lwipNetworkConfigChange函数作为在挂起时重新启动lwip的变通方法没有帮助。

    MAC地址在挂起时未受到干扰。

    悬挂时,活动的TCP_PCB的数量为2。

    为了进一步调试,我们现在添加了,以记录悬挂时每个活动的TCP_PCB的状态。

    将 在我们收到下一个挂起事件时更新。

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

    您好Krishna:

    可能有助于为TCPIP启用LWIP调试并在虚拟COM端口监视器上打印状态调试消息。 LWIP 1.4 Tm1内部TCP时钟速度似乎对通过EMAC0 DMARIS寄存器报告的PBUF故障有一定影响。  

    此致,

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

    你好,GI

    [QUOTE userid="4.8581万" url="~/support/pulcs/arm-based pulics/group/arm-based pulics/f/arm-based pulics/108.4577万/tm4c1294ncpdt-tcp-server-do-no-respond-ping-from-client-from-from-hour-working-hour-working/EM4038F1?UDMIS#PB332?UIP<xmt-block0>1294 1.44038 1.4 上的一些信号速度似乎已报告了一些的信号速度。  [/引述]

    请您详细解释一下以上内容吗?  

    将虚拟主机连接到主板很困难,因为主板位于外壳内。 我要做的是在挂起时将各种TCP详细信息写入SD卡中的文件。  对  我必须登录到该文件的值有什么建议? 目前,2个活动的TCP_PCB在挂起后处于已建立状态。

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1294 man-hour-working-hour-hour-work/404877]写40.4877万写卡时发生的各种详细信息。

    似乎 最好将 XDC调试器插入JTAG端口,并通过CCS调试在EMAC0DMARIS寄存器上设置监视。 您可以轻松调整多个lwipopts.h TCP设置以控制数据包消息传送。 以下设置用于将IOT数据包传输到具有不同PCB名称的Internet主机和本地Telnet客户端。 有一个LWIP时钟模块,可以在其中设置TCP协议的时钟信号数,搜索LWIP文件。 如果调用LIWP堆栈的GPTM为LWIP内部计时器计时太快,则会出现各种调试错误消息。  

    //*****************************************************************************
    //
    // ---------- IP options ----------
    //
    //*****************************************************************************
    #define IP_FORWARD                      0
    #define IP_OPTIONS_ALLOWED              1    // default 1
    #define IP_REASSEMBLY                   1    // default 1 Incomming
    #define IP_FRAG                         1    // default 1 Outgoing any exceeding MTU
    #define IP_REASS_MAXAGE                 3    // default 3 wait for seconds
    #define IP_REASS_MAX_PBUFS             10    // default 10 Max PBUFS waiting to be reassembled
    #define IP_FRAG_USES_STATIC_BUF         0    // May not be used for DMA-enabled MACs!
    #define IP_FRAG_MAX_MTU                1500
    #define IP_DEFAULT_TTL                  255
    //#define IP_SOF_BROADCAST                 1 // Broadcast filter per pcb on udp send operations
    //#define IP_SOF_BROADCAST_RECV            1 // Broadcast filter on recv operations
    
    
    //*****************************************************************************
    //
    // ---------- TCP options ----------
    //
    //*****************************************************************************
    #define LWIP_TCP                        1
    #define TCP_TTL                         (IP_DEFAULT_TTL)
    #define TCP_WND                         (4 * TCP_MSS) // 1400 default 2048, 2x TCP_MSS min.
    #define TCP_MAXRTX                      12   //default 12
    #define TCP_SYNMAXRTX                   6    //default 6
    #define TCP_QUEUE_OOSEQ                 1    // Queue segments that arrive out of order. (p!=NULL)
                                                 // define 0 if low on memory.
    #define TCP_OOSEQ_MAX_PBUFS             12   // The maximum number of pbufs queued on ooseq per pcb.
    #define TCP_OOSEQ_MAX_BYTES             80   // The maximum number of bytes queued on ooseq per pcb, 960 bytes.
    #define TCP_MSS                        850  // default 536, Sets the upper limit advertised, to transmit
                                                 // back to the remote host. We are the remote host.
    #define TCP_CALCULATE_EFF_SEND_MSS      1
    #define TCP_SNDQUEUELOWAT               LWIP_MAX(((TCP_SND_QUEUELEN)/2), 5)
    #define TCP_SND_BUF                     (4 * TCP_MSS) //default 2x, now 1400
    #define TCP_SND_QUEUELEN                (3 * (TCP_SND_BUF/TCP_MSS)) //12 default 16
    #define TCP_LISTEN_BACKLOG              1    // Listen backlog explicitely defined 0xff
    #define TCP_DEFAULT_LISTEN_BACKLOG      0xff //256 Bytes
    #define TCP_OVERSIZE                    TCP_MSS // default TCP_MSS 850 bytes

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

    这是有关该问题的更新:

    我们在两个地方试过一个电路板。 在一个地方,它可以连续运行数天。 在另一个地方,同一个主板在几个小时后挂起。

    因此,我们怀疑问题可能出在第二个位置使用的以太网交换机。 我们正在交换交换机以确认。 将很快更新。

    交换机是否会导致此类挂起问题?

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

    您好Krishna:

    Charles是我们这一主题的专家,他在下周之前不在办公室-请在他回来时得到回复。

    此致,

    Ralph Jacobi