您好!
我在 f28388的 CM 上使用 LWIP。
在 f2838xif.c:f2838xif_transmit ()中,如果输入 pbuf 是一个链,则发送描述符将被链接。 使用 nextPacketDesc 成员链接描述符。
nextPacketDesc 成员还用于将描述符放置在以太网驱动程序的等待队列中,位于 ethernet.c:ethernet_performPushOnPacketQueue()中。
f2838xif.c:f2838xif_process_transmit ()中的 TX 完成调用遵循 nextPacketDesc 的链、为每个描述符调用 mem_free ()。
这会导致问题、因为当描述符从等待队列中删除并被指定给 EMAC 发送时、它可能具有非空的 nextPacketDesc、 这意味着、当调用完成例程时、它将释放等待队列中的所有描述符、而不管它们是否是原始 pbuf 链的一部分。
请注意、即使 pbufs 从未被链接、这也是一个问题。 只要 TX 等待队列中有多个数据包、就会发生此问题。
是否有人可以确认我已正确理解了这一点、这确实是一个错误?
我认为,如果例程 ethernet.c:ethernet_removePacketsFromTxQueue()安排清除链中最后一个描述符的 nextPacketDesc 成员,因为它将这些描述符发送到器件,那么问题就会得到解决。