Page 1 of 1

udp接收延迟后多个包同时到达

Posted: Thu Aug 24, 2023 3:48 am
by lfs911
大家好,我使用esp32-s2运行udp_server这个例程监听一个端口并接收数据,主机端是pc进行100hz的udp发送,包长度296,路由器距离esp32-s2足够近,rssi在-45到-50之间,能够排除路由器和主机发送的问题。

期望的运行结果:esp32-s2以10-30ms(考虑丢包情况)的间隔接收到udp包。

实际运行结果:大部分情况下按照期望运行结果运行,但是不时会出现突发延迟的情况,即例如出现udp接收阻塞200ms后同时接收到15-20个包,这个阻塞延迟时间在100-800ms之间不定。

问题分析:怀疑是例程的设置问题,因为阻塞200ms的阶段udp包实际并没有丢失,依然被esp32接收并放到缓冲区中,只是recvfrom函数似乎没有一接收到数据就立即从缓冲区读出,而是等到缓冲区积累了一定数量后才一次性把15-20个包同时读出来。

请教论坛大佬以及官方技术大神是否有解决思路,谢谢!

Re: udp接收延迟后多个包同时到达

Posted: Tue Aug 29, 2023 7:27 am
by ESP_YJM
你试试把 WIFI AMPDU 功能关了试试呢。idf.py menuconfig-> Component config->Wi-Fi->[]WiFi AMPDU RX

Re: udp接收延迟后多个包同时到达

Posted: Wed Aug 30, 2023 4:30 am
by lfs911
关闭WiFi AMPDU RX之后问题无改善,反而出现延迟更明显的情况,未关闭前偶发延迟再80-150ms之间,关闭之后会到400+ms

Re: udp接收延迟后多个包同时到达

Posted: Wed Aug 30, 2023 7:55 am
by ESP_YJM
可以贴一下代码吗?你说的阻塞 200ms 是你在应用层主动 delay 了 200 ms 后再去调用 recvform 函数去收 UDP 包?