STM32
直播中

李玉兰

7年用户 1484经验值
私信 关注
[问答]

在STM32Cube_FW_F4_V1.3.0的Ethernet库中,将ETH_RXBUFNB定义为非1的值遇到的疑问求解

STM32Cube_FW_F4_V1.3.0 的Ethernet库中,将ETH_RXBUFNB定义为非1的值,大流量PING包和TCP一段时间后,通过Wireshark 监测发现系统对包的响应延迟,常常要收到多个包才一次全部响应这几个包的数据,PING访问会出错。而将ETH_RXBUFNB定义为1则故障解决。涉及到ETH_RXBUFNB只有HAL_ETH_GetReceivedFrame_IT,也没看出个所以然,
虽然将ETH_RXBUFNB定义为1后,系统目前工作正常,但毕竟只有一个发送缓冲区,可能会影响性能。
请教高手什么原因,是库函数有问题,还是其他设置原因,先谢谢了!

回帖(1)

麻酱

2024-4-16 16:49:58
ETH_RXBUFNB是以太网接收缓冲区的数量定义。默认情况下,它被定义为1,这意味着系统只有一个接收缓冲区。

当你将ETH_RXBUFNB定义为非1的值时,系统会根据定义的数量创建相应数量的接收缓冲区。然而,由于ETH_RXBUFNB的增加,系统的响应延迟可能会增加。

可能的原因是,定义多个接收缓冲区会导致处理接收数据的中断处理函数(HAL_ETH_GetReceivedFrame_IT)的复杂性增加。在接收到多个包后,中断处理函数可能需要更长时间来处理和响应这些包。

此外,多个接收缓冲区还可能导致接收到的数据在处理之前被缓冲起来,这也可能导致系统对包的响应延迟增加。

通过将ETH_RXBUFNB定义为1,系统只有一个接收缓冲区,这可能会减少系统的响应延迟,但可能会影响性能。

如果你需要使用多个接收缓冲区,并且遇到了响应延迟的问题,你可以考虑优化中断处理函数,以减少处理和响应接收数据的时间。

此外,确保你的系统配置和网络设置都正确,并与硬件规格相匹配。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分