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

lfs911
Posts: 4
Joined: Mon Aug 07, 2023 5:38 pm

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

Postby lfs911 » Thu Aug 24, 2023 3:48 am

大家好,我使用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个包同时读出来。

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

ESP_YJM
Posts: 300
Joined: Fri Feb 26, 2021 10:30 am

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

Postby ESP_YJM » Tue Aug 29, 2023 7:27 am

你试试把 WIFI AMPDU 功能关了试试呢。idf.py menuconfig-> Component config->Wi-Fi->[]WiFi AMPDU RX

lfs911
Posts: 4
Joined: Mon Aug 07, 2023 5:38 pm

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

Postby lfs911 » Wed Aug 30, 2023 4:30 am

关闭WiFi AMPDU RX之后问题无改善,反而出现延迟更明显的情况,未关闭前偶发延迟再80-150ms之间,关闭之后会到400+ms

ESP_YJM
Posts: 300
Joined: Fri Feb 26, 2021 10:30 am

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

Postby ESP_YJM » Wed Aug 30, 2023 7:55 am

可以贴一下代码吗?你说的阻塞 200ms 是你在应用层主动 delay 了 200 ms 后再去调用 recvform 函数去收 UDP 包?

Who is online

Users browsing this forum: No registered users and 20 guests