主题中讨论的其他器件:C2000WARE
大家好、
我将在 driverlib_cm 中研究以太网驱动程序、尝试将 lwIP 堆栈移植到具有 SYS/BIOS 的应用。 作为了解以太网驱动程序和 lwIP 的起点、我还将介绍 enet_lwip 示例。 代码不容易理解、但我开始了解情况。 我有几个问题:
1.以太网驱动程序是否有详细的 API 参考? 我只找到了此文档、它没有提供太多详细信息:
dev.ti.com/.../ethernet.html pfcbGetPacket()回调函数必须返回一个指向填充Ethernet_Pkt_Desc结构的指针、该结构dataBuffer位于应用程序存储器(Ethernet_rxBuffer示例代码中的数组)中。 但是Ethernet_pktDescriptorRX、只有一个定义的结构、它是否不会被后续调用回调所覆盖? 我会更早地期待一个描述符池(数组)。
3.如果我看看pfcbGetPacket()如何在以太网.c 代码中使用回调,在应用程序中没有可用内存的情况下,还会检查 NULL 结果Ethernet_rxBuffer。 但是、默认Ethernet_getPacketBuffer()实现(在 enet_lwip 示例中也使用)始终返回缓冲区的指针、不会检查它是否实际可用(rxBuffIndex仅在0和1之间切换)。 这不能导致 Rx 数据被覆盖? 或者我是否缺少了什么?
4. pfcbRxPacket()在数据包 Rx 完成后调用回调函数。 我假设“Ethernet_Pkt_Desc *pPacket”参数是Ethernet_Pkt_Desc指向在调用pfcbGetPacket()?时获取的结构的指针。 所以我认为这也是“释放”描述符所使用的内存的地方dataBuffer,对吧?
5.查看默认Ethernet_receivePacketCallback()实现,pfcbRxPacket()回调将返回一个指向新的“空闲”描述符的指针,就像pfcbGetPacket()这样,正确吗?
谢谢、此致、
Arjan