CC3235SF: 使用sl_SendTo()函数发送UDP数据时,偶尔会返回-2005,该如何处理?

Part Number: CC3235SF

你好,我在使用CC3235SF作为STA向PC端发送UDP数据,数据量大约2.7Mbps。当我的设备数量增加到5~8个时,工作很短一段时间(大约几十秒到几分钟),就会出现一次发送失败的问题,sl_SendTo()函数返回值是-2005。但如果只有两到三台设备时,这个错误发生的概率就会小得多,往往几十分钟都不发生。我的问题是:

1、这个-2005的错误码,是什么引起的?

2、在出现这个错误码后,我应该怎么处理?如何让设备从错误中恢复过来,继续工作?

谢谢!

  • 后来经过实验发现,出现这个问题的原因是我的UDP接收的函数和发送的函数在两个不同的任务中,接收函数使用的是阻塞模式,调用后一直在等待。而另一个任务中不停的调用发送函数,偶尔就会出现返回-2005的情况。后来我将接收和发送放在同一个任务中,并且接收函数改为超时时间很短,可以马上返回的,这样就不出现返回-2005错误的问题了。但为什么在两个线程中会出问题的原因并没有找到。

  • 当你在两个不同任务(线程)中分别处理UDP的接收和发送时,并且接收任务使用阻塞模式,这确实可能引发一些问题,尤其是在高数据量和多设备环境下。比如阻塞接收导致,阻塞接收会阻止接收任务释放CPU给其他任务,包括发送任务。当发送任务长时间得不到执行时,它可能会错过发送窗口或超时,导致发送失败。

    另外也存在资源争用:虽然UDP发送和接收在逻辑上是分开的,但它们仍然共享系统资源,如CPU时间、内存和套接字缓冲区。在高并发情况下,这些资源的争用可能导致发送或接收失败。