【发布时间】:2016-02-15 11:46:03
【问题描述】:
我在需要高数据速率的应用程序中使用 LWIP。所以我分配了 4 个 pbuf 并存储它们的地址,并使用一些硬件魔法,一个接一个地填充它们,然后告诉程序缓冲区已准备好,软件将其作为 UDP 数据包发送,但是当我嗅到数据包的一段时间后,我我的数据包中有大约 60 个额外字节,它们看起来像额外的 UDP 标头,但在有效负载中。 任何解决方法/建议?
【问题讨论】:
我在需要高数据速率的应用程序中使用 LWIP。所以我分配了 4 个 pbuf 并存储它们的地址,并使用一些硬件魔法,一个接一个地填充它们,然后告诉程序缓冲区已准备好,软件将其作为 UDP 数据包发送,但是当我嗅到数据包的一段时间后,我我的数据包中有大约 60 个额外字节,它们看起来像额外的 UDP 标头,但在有效负载中。 任何解决方法/建议?
【问题讨论】:
在我的工作项目中,我们遇到了导致类似问题的 pbuf 损坏。我们使用了来自 xilinx 的多个不同类型的 MAC,pbuf 部门对此并不满意。我建议您为 IP 层和可能的 UDP 层打开完整的 lwip 调试。然后手动将打印件修剪为可重现问题的可管理内容(lwip 具有最低打印级别 - 您可以使用它来帮助修剪诸如警告与严重打印件之类的内容)。在我们的例子中,我们会收到 UDP 或 IP 层校验和错误,这是坏东西的标志。此外,一次只在一个方向上进行测试是有帮助的,以限制在一个方向上出现坏东西的可能性。我们使用了 xilinx 的 iperf 示例并对其进行了扩展。这些有助于解决问题。 BTW 4 pbufs 什么都不是...当我查看以太网流量时 - 有很多事情发生,开销等...有很多潜在的问题,从太少的 ARP 表条目等等...四个 pbuf低得离谱,如果你被困在记忆中,我为你尝试使用 lwIP 感到抱歉。这听起来就像一场噩梦。另外,请注意通常打印会阻塞......这样会破坏性能。将 lwip 调试打印替换为您知道不会阻塞实时性能的非阻塞例程是明智的。
【讨论】: