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.

[参考译文] RM57L843:lwip 1.4.1和 hdkif.c 端口

Guru**** 2604725 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/734725/rm57l843-lwip-1-4-1-and-the-hdkif-c-port

器件型号:RM57L843
主题中讨论的其他器件:HALCOGEN

我们有一个使用 lwip 1.4.1的产品、该实现基于 lwip 演示项目。 我们不使用 EMAC 中断来接收和传输数据。 所有 EMAC 通信都经过轮询、所有堆栈使用都在相同的上下文(我们的主循环)中发生。 我们也不会在目标上运行任何操作系统。

我们有一个在堆栈中产生错误的用例。 现在、这个问题可能不是堆栈或 hdkif 端口、但我们正在尝试找到问题的根源。

良好的用例是将"永久"运行的测试、没有任何问题。 它由每个程序发送一个小型 UDP 封包(UDP 有效载荷数据约为 8字节)到我们的目标、目标使用更大的数据包(UDP 有效载荷高达512字节)进行应答。 这种情况会一直持续下去。
当我们更改其中一个程序以向目标发送更大的 UDP 数据包时、即发生错误的用例、例如、高达480字节的 UDP 数据。 由于下面描述的问题、目标现在将丢弃一个数据包。

这是从 hdkif.c 接收(hdkif_rx_inthandler ()代码的一部分

/*调整链接统计信息*/
LINK_STATS_INC (link.recv);

/*处理数据包*/
if (ethernet_input ((struct pbuf *) q、netif)!= ERR_OK){
/*调整链接统计信息*/
LINK_STATS_INC (link.memerr);
LINK_STATS_INC (LINK_DROP);
} 

上面有一个插入式 SoM 调试代码、该代码复制了 pbuf 结构(q)、并在调用 ethernet_input 之前从 q 复制所有数据以进行调试。
我们使用 pbuf_copy_partial ()复制数据,它返回 pbuf 链包含60字节数据。 但出于某些奇怪的原因、这些数据分布在链中的2 pbuf 上。
lwip 堆栈似乎假定所有堆栈头、在我们的例子中、ETH+IP+UDP 可以容纳在第一个 pbuf 中。 但是、由于本例中的传入数据分布在2个 pbuf 上、因此所有头文件都不能放入第一个 pbuf 中。 在我们的设置中、pbufs (memp_malloc)的大小应为256字节、因此这种情况非常奇怪。
我已包含 CCS 监视数据和 lwip 选项文件等的图像
如何在第一个 pbuf 中突然只包含少量数据?
此致、
Mads
 S
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    小小的更新。

    在 hdkif.c 文件中、我更改了此行

    #define PBUF_LEN_MAX (6*256)//MAX_TRANSFER_UNIT
    

    是 memp_malloc 块大小的乘数。 这似乎解决了我们的问题、现在测试已经运行了17个多小时。

    因此、hdkif.c 驱动程序(RM57 EMAC 的端口)中似乎存在错误。 我尚未完全找到问题所在、但可能是如何将 pbufs 分配给 EMAC 缓冲区描述符。 以及如何在以后重新分配它们。  

    我必须更深入地研究这一点、但现在我有更多的紧迫任务。 hdkif.c 驱动程序的作者是谁?  

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

    演示中使用的 MAX_TRANSFER_UNIT 的值为1514字节、即1500字节有效载荷(最大值)加上14字节标头。

    我将与开发人员核实数据为何分布在链中的2个 pbuf 上。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、QJ Wang

    非常感谢。

    我认为我没有提到的一件事是、测试通常会在开始失败之前运行一小段时间(在我们的情况下、对于当前负载、测试需要10分钟或更长时间)、因此似乎需要花一点时间来"混乱"接收系统。

    当它发生故障时、并不是所有丢包、大多数数据包都会被正确接收、但有时会因为错误而被丢弃。

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

    我要求我们的软件开发人员听到提示音。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Mads、

    我们的软件开发人员正在为新的 HalCoGen 版本处理其他项目、之后他将检查 lwip 演示代码并修复问题。 由此给您带来的不便、我们深表歉意。