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.

[参考译文] EK-TM4C1294XL:UDP 应用程序崩溃

Guru**** 2535750 points
Other Parts Discussed in Thread: EK-TM4C1294XL, ENERGIA

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/942350/ek-tm4c1294xl-udp-application-crash

器件型号:EK-TM4C1294XL
主题中讨论的其他器件: Energia

下午好!

我目前使用 EK-TM4C1294XL 板进行简单的配置:一个网络设备通过 UDP 向该板发送消息,当该板接收到消息时,它应将消息发回,并对数据进行一些简单的操作。 网络设备每秒发送一条消息。

我的问题是当我有许多网络设备(大约150个)时,几个小时后,电路板因功能 udp.endPacket()崩溃而结束。 简单的重新启动就足以恢复正常状态。

我已经访问了 TI-support,它为我提供了以下链接: e2e.ti.com/.../1316428。 遗憾的是、所示的两种解决方案不适用于我们的应用。

您是否还有其他想法来修复此错误?

此致、
Richard Lajouanique

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

    您好 Richard、

     什么是  udp.endPacket()? 这是您自己的功能吗?  

     您是否正在使用 LwIP?

     如果您使用的是 LwIP、您能否增加与 UDP 相关的内存和内部内存池大小。 下面只是 lwipopts.h 文件中的一个示例。 如果您不使用 LwIP、那么您使用的是什么 TCP/IP 堆栈? 如果您正在使用另一个第三方堆栈、我建议您与堆栈提供商联系、以获取有关问题的提示。  

    //
    //
    //------ 内存选项--------------------------------------------------------
    //
    //
    //#define MEM_libc_malloc 0
    #define MEM_alignment 4.
    #define MEM_SIZE (64 * 1024)
    //#define MEMP_OVERFLOAD_CHECK 0
    //#define MEMP_sanity_check 0
    //#define MEM_USE_Pools 0
    //#define MEMP_USE_CUSTOM_Pools 0

    //
    //
    //------ 内部内存池大小--------------------------------------------------------
    //
    //
    #define MEMP_NUM_PBUF 48 //默认16
    //#define MEMP_NUM_RAW_PCB 4.
    //#define MEMP_NUM_UDP_PCB 4.
    #define MEMP_NUM_tcp_PCB 16 //默认5
    //#define MEMP_NUM_tcp_PCV_Listen 8.
    //#define MEMP_NUM_tcp_SEG 16.
    //#define MEMP_NUM_REASSDATA 5.
    //#define MEMP_NUM_ARP_queue 30
    //#define MEMP_NUM_IGMP_GROUP 8
    #define MEMP_NUM_SYS_TIMEOUT 8.
    //#define MEMP_NUM_NETBUF 2.
    //#define MEMP_NUM_NETCONN 4.
    //#define MEMP_NUM_TCPIP_MSG_API 8.
    //#define MEMP_NUM_TCPIP_MSG_INPKT 8.
    #define PBUF_POOL_SIZE 48 //默认值16

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

    您好、Charles、

    非常感谢您的回答。

    对于我们的应用、我们使用通过 Energia 框架实现的 LwIP。 udp.endPacket()不是我自己的函数,而是 来自 packages/energia/hardware/tivac/1.0.3/libraries/ethernet/EthernetUdp.h 的函数

    我今天早上尝试了您的修改(除了我在第一封邮件中提到的这个帖子之外)。 我们观察到情况有所改善:申请在15分钟后崩溃,而不是最初的5分钟。  

    您是否有任何其他建议来防止此错误?

    此致、
    Richard

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

    您好 Richard、

     感谢您澄清 UDP.endPacket()是 Energia 函数。 我没有 Energia 平台相关经验、请参阅 常见问题 解答5。 简而言之、对于 Energia 相关问题、我们通常不支持在该论坛中提问、建议客户向 https://forum.43oh.com/forum/119-energia/提问。   我希望您能在那里获得 Energia 专家的更好帮助。  

     话虽如此、您在 LwIP 配置的前后为将崩溃时间从5分钟缩短到15分钟做了什么? 您是否分配了足够的内存和 pbuf 池大小? 打开150个连接将需要大量的堆内存。 这将是一个需要注意的问题。  

     另请注意、您提到的帖子是一个错误、已在2014年修复。 我不知道最近有新的错误。 我还有一个建议是、由于 LwIP 是第三方工具、因此您也可以访问 LwIP 论坛。 如果他们发现了您的问题或其堆栈中存在已知问题(LwIP 1.4.1)、他们的专家可能会提供指导。 顺便说一下、我忘记问您使用的是哪个 LwIP 版本。 我们的 TivaWare 具有用于 LwIP 1.4.1的端口。 我不知道您使用的是什么版本、因为您使用的是 Energia。  

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

    由此给您带来的不便、我们深表歉意。 实际上、有人建议我在这个论坛上发布我的问题。

    为了缩短崩溃时间、我执行了您建议的修改、将相同的默认值替换为您提供的值。 您知道我们可以增加多少缓冲器吗?

    非常感谢您的观看。

    此致、
    Richard

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

    您好 Richard、

     我不知道为什么 Energia 论坛会回到这里。  

     我发布的 lwipopts.h 值用于其中一个 TivaWare 以太网示例。 这可能足以满足该应用的要求、因为该应用可能不适合您的情况。 我不知道其中有多大的问题会解决你的具体问题。 但我会将 MEM_SIZE 和 PBUF_POOL_SIZE 增大到比我之前提到的值更大的值。 例如 、我有一个 PBUF_POOL_SIZE 48。 为什么不改为96、看看这将如何影响您的崩溃时间。 对 MEM_SIZE 执行相同的操作。