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.

[参考译文] AM2732:LWIP:接收大封装时的问题

Guru**** 2551110 points
Other Parts Discussed in Thread: AM2732

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1223307/am2732-lwip-issue-with-big-package-receiving

器件型号:AM2732

您好!

我的客户正在使用 TCP 客户端从其他服务器接收数据。 将有一个30KB 数据的伺服包从服务器发送到 AM2732。 客户发现 TCP 客户端将挂起。 出现问题时、ping 会失败。

您对此问题有何评论?

谢谢。

克里斯

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

    添加:在2732端、建立了一个 TCP 服务器来接收数据。 TCP 客户端发送数十个30KB 数据包、这很可能导致 TCP 服务器挂起。 目前、减小传输频率或尺寸可以降低这种可能性。

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

    尊敬的 Gmsy、Chris:

    我正在研究这个问题。

    此致、

    Shaunak

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

    尊敬的 Chris 和 Gmsy:  

    很抱歉响应延迟、  增加客户端或服务器容量的步骤如下:

    1)在  mcu_plus_sdk/source/networking/lwip/lwip-config/am273x/lwippools.h、  增加元素数量、与所附的屏幕截图类似:

    2)可能还必须相应地修改 linker.cmd 中的内存区域以适应 LWIP_POOL 中元素数量的增加

    3) 3)重新编译库、重新编译示例、该操作应该可以正常运行。

    此致、

    Shaunak

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

    我们的 cfg 为  

    LWIP_malloc_MEMPOOL (80,128)
    LWIP_malloc_MEMPOOL (80,1568)
    LWIP_malloc_MEMPOOL (10,4096)

    问题是相同的。 我们没有足够的内存来进一步增加。 您能帮助我们了解一下您是否在此配置中遇到同样的问题吗?

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

    尊敬的 Gmsy:

    您能否分享您的 linker.cmd 文件 情况? 我想检查 LwIP Pbufs 在内存中的位置。

    此致、

    Shaunak

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

    e2e.ti.com/.../r5f_5F00_linker_5F00_enet.zip

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

    尊敬的 Gmsy:

    我看到您将 LwIP Pbuf 存储在 MSS L2区域、并且在 MSS L2区域中有50.176 KB 的空间。

    是否有任何特定区域不将 DSS L3用于 Pbuf?

    此外、MSS_L2区域最大可以设置为960 KB。 您可以尝试增加 MSS L2长度或使用可扩展至3.5625 MB 的 DSS L3

    此致、

    Shaunak

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

    尊敬的 Shaunak:

    我们的 MSS_ L2只剩下7.5KB、DSS_ L3算法正在使用中。 正如上次所讨论的,我们已经增加了网络 MEMOOL 的数量到80,但这种现象仍然存在。 问题是否可能是由其他原因造成的?

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

    尊敬的 Gmsy:

    即使将实例数增加到了80、但如果没有可用于分配 Pbuf 的内存、则无法工作、我想情况就是这样、为了更深入地研究该问题、您可能希望从以下位置启用 LWIP 调试日志:  source/networking/lwip/lwip-config/am273x/lwipopts.h

    然后、重新编译库和工程、调试日志将帮助您识别问题。

    注意:通过 CCS 重建项目不会重建 lwip 库。

    此致、

    ~Shaunak

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

    大家好、Gymsy/Chris、

    您能否尝试从以下位置启用 LWIP_debug 日志? 源/网络/lwip/ lwip-config/am273x/ lwippts.h  如果没有错误日志、很难找到问题的根本原因。

    由于本例中的内存限制、我们在接收数据包时很可能会内存不足、因此 NETBUF 将为 NULL 指针、 这可能会产生与内存访问相关的错误、进而关闭连接(这解释了 ping 不起作用的原因)。

    此致、
    Shaunak

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

    Shaunak,

    我想启用调试日志、但头文件中有很多这样的日志。 我尝试了以下设置、但没有看到任何新打印。 如果我遗漏了任何内容或需要启用所有内容、您会提供建议吗?

    #define LWIP_DEBUG 1

    #ifdef LWIP_debug

    #define LWIP_DBG_MIN_LEVEL 0
    #define PPP_DEBUG LWIP_DBG_OFF
    #define MEM_DEBUG LWIP_DBG_ON
    #define MEMP_DEBUG LWIP_DBG_ON
    #define PBUF_DEBUG LWIP_DBG_ON
    #define API_LIB_DEBUG LWIP_DBG_OFF
    #define API_MSG_DEBUG LWIP_DBG_OFF
    #define TCPIP_DEBUG LWIP_DBG_OFF
    #define NETIF_DEBUG LWIP_DBG_OFF
    #define Socket _调试 LWIP_DBG_OFF
    #define DNS_DEBUG LWIP_DBG_OFF
    #define AUTOIP_DEBUG LWIP_DBG_OFF
    #define DHCP_DEBUG LWIP_DBG_OFF
    #define IP_DEBUG LWIP_DBG_OFF
    #define IP_REASH_DEBUG LWIP_DBG_OFF
    #define ICMP_DEBUG LWIP_DBG_OFF
    #define IGMP_DEBUG LWIP_DBG_OFF
    #define UDP_DEBUG LWIP_DBG_OFF
    #define tcp_debug LWIP_DBG_on
    #define tcp_input_debug LWIP_DBG_ON
    #define tcp_output_debug LWIP_DBG_off
    #define tcp_rto_debug LWIP_DBG_OFF
    #define tcp_CWND_debug LWIP_DBG_off
    #define tcp_WND_debug LWIP_DBG_off
    #define tcp_FR_debug LWIP_DBG_off
    #define tcp_QLEN_debug LWIP_DBG_off
    #define tcp_RST_debug LWIP_DBG_off
    #endif

    #define LWIP_DBG_TYPE_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_Fresh |LWIP_DBG_HALT)

    我在 AM2732EVM 上重现了客户的问题(mcu_plus_sdk_am273x_08_04_00_17)、并看到 发生问题时 netbuf_data 调用返回的长度异常(太大)。 您对需要启用哪一个调试以进行进一步检查有更多看法吗?

    netbuf_data (buf、&data、&len);
    printf ("len=%d\n"、len);   

    长度=1460

    长度=1460

    长度=1460

    长度=1460

    长度=1460

    长度=1460

    长度=1460

    长度=1460

    长度=28005

     

    谢谢。

    克里斯  

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

    Chris、您好!

    只需确保在完成上述更改后重新编译 LwIP 库、然后清理并重新编译示例。

    此致、
    Shaunak

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

    Shaunak,

    完成 上述更改后、是否必须清理并重新构建库而不是增量构建?

    我以低于命令的速度运行、但运行不干净。

    gmake -s 库 PROFILE=调试

    谢谢。

    克里斯

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

    Chris、您好!

    可以使用上述命令并构建库、请确保您也重新编译示例。 上述异常长度似乎是由于一些损坏的数据包,这似乎也是一些内存限制问题,因为标准 netbuf 大小将只有1460。

    1.客户可以使用 TCM 存储器还是 SBL 存储器,因为他们有存储器限制。

    2.另外,在打印 netbuf 的长度之前,您还能检查一下 netbuf 是否为 NULL。  

    此致、
    Shaunak

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

    Shaunak,

    我使用了不同的命令、该命令将 L3用于 LWIP 缓冲器。 请在下方查看。

    e2e.ti.com/.../4645.linker.cmd

    我更改了  lwippools.h 更改为  按照您的建议增加元素数量。

    我启用了所有调试日志、但看不到调试信息、但测试用例无法接收到任何 eth 包、然后被挂起。  

    我将尝试检查 netbuf 是否为 NULL。 我仍然需要您建议打开哪个调试信息。

    谢谢。

    克里斯