- LWIP版本为2.0.3,注意分辨;其他版本应该也可以实现
- 使用RTThread版本4.1.0
- 硬件为STM32F407VGT6+LAN8720A
实现思路:理解LWIP数据接收过程,在收到数据后读取数据长度,并对数据长度做累加计算,间隔1秒进行单位转换后即可。
分析接收过程:当数据来临时触发硬件中断,调用中断回调函数 HAL_ETH_RxCpltCallback()函数,在回调函数中调用eth_device_ready(),在eth_device_ready中通过邮箱传递指针到eth_rx_thread_entry线程中进行接收数据,在eth_rx_thread_entry中创建接收使用的pbuf指针,在线程中完成数据的一次拷贝,之后调用函数device->netif->input(p, device->netif);实际上是netif_input()函数,之后调用ethernet_input()函数,在ethernet_input()中调用ip4_input()函数或者etharp_input()函数区分IP包和ARP包,之后IP包又分为UDP、TCP、ICMP和IGMP处理;ARP包分为ARP请求和ARP应答。
以TCP数据为例,流程图如下:
实现方案:在硬件接收到数据后进行统计接收的字节数,字节数可有接收的pbuf结构体的len提供,pb