乐鑫技术交流
直播中

李郝荫

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

esp8266的freertos+lwip不支持在多个任务中创建多个不同的socket吗?

我用的是V1.5.0版本的rtos的sdk。
    我起了两个任务,每个任务都创建一个tcp socket 客户端,每个socket都是设置成非阻塞的。
    其中一个任务的socket,我用select去监测读和写这个socket;另外一个任务的socket,我收发完数据后,就把它close了。
    但是,我发现经常出现以下现象(但不是必现的现象):一旦把另外一个socket close掉,则剩下的那个socket的select返回值变成-1,errno却是0。

    说明一下:剩下socket的select操作只针对本socket fd,用来监听本socket fd的读和写,不涉及到另外一个任务中的socket fd。也就是说每个socket都是在各自的任务中创建、读写和close的,按照道理应该是互相独立的,但是为啥会互相影响?

    难道乐鑫的esp8266的freertos+lwip不支持在多个任务中创建多个不同的socket吗?麻烦帮忙找一下原因!

回帖(1)

jfsky

2024-7-11 16:15:10
1. **确保资源充足**:ESP8266的资源有限,特别是在内存方面。确保您的应用程序没有超出可用内存。

2. **检查任务优先级**:确保您的任务优先级设置得当,以避免高优先级任务长时间占用CPU,导致低优先级任务无法运行。

3. **使用互斥锁**:如果您的任务需要访问共享资源(如socket),使用互斥锁(mutex)可以防止竞争条件。

4. **检查LwIP配置**:确保LwIP的配置适合您的应用程序需求。例如,检查TCP连接的最大数量和内存池的大小。

5. **调试和日志记录**:在您的代码中添加调试语句和日志记录,以帮助您了解问题发生的原因和时间。

6. **更新SDK**:您提到使用的是V1.5.0版本的RTOS SDK。考虑升级到较新的版本,因为新版本可能修复了一些已知的问题。

7. **检查select实现**:确保您的select实现是正确的,并且适用于非阻塞socket。在某些情况下,select可能无法正确处理非阻塞socket。

8. **错误处理**:在您的代码中添加错误处理逻辑,以便在遇到问题时能够优雅地恢复。

9. **减少任务切换**:尽量减少任务之间的切换,以减少上下文切换的开销。

10. **优化网络通信**:优化您的网络通信协议,以减少数据传输的延迟和错误。


举报

更多回帖

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