完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用的是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个回答
|
|
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. **优化网络通信**:优化您的网络通信协议,以减少数据传输的延迟和错误。 |
|
|
|
只有小组成员才能发言,加入小组>>
1140 浏览 1 评论
577浏览 6评论
478浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
462浏览 5评论
463浏览 4评论
438浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 17:25 , Processed in 0.930890 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号