CC3100 数据接收的问题!sl_RecvFrom 卡死
我再使用CC3100做wifi通信的时候,在调用的sl_RecvFrom的时候,一直要等到有数据过来才能执行这个函数,相当于没有收到数据的话程序就在这里卡死了!好像是关于阻塞和非阻塞的问题吧!
怎么样采用其他方式接收吗?比如采用中断方式接收,或者是不是可以再SimpleLinkSockEventHandler函数里面完成接收?
或者说,最不好的情况可以不用在sl_RecvFrom接收的情况卡死,采用查询的方式接收,能否给出响应的例子,
非常感谢!
找到非阻塞方式的使用办法了,在API里有介绍!
SlSockNonblocking_t enableOption;
enableOption.NonblockingEnabled = 1;
sl_SetSockOpt(SockID,SL_SOL_SOCKET,SL_SO_NONBLOCKING, (_u8 *)&enableOption,sizeof(enableOption)); // Enable/disable nonblocking mode
但是按照API的方法试了之后,我再不停的查询发送的过程中,程序没有跑多长时间就死掉了!而且动不动就死掉,应该是socket死掉,程序一直在执行
_SlNonOsMainLoopTask(void)函数
发现程序死在_SlNonOsSemGet函数里:
_SlNonOsRetVal_t _SlNonOsSemGet(_SlNonOsSemObj_t* pSyncObj, _SlNonOsSemObj_t WaitValue, _SlNonOsSemObj_t SetValue, _SlNonOsTime_t Timeout) { while (Timeout>0) { if (WaitValue == *pSyncObj) { *pSyncObj = SetValue; break; } if (Timeout != NONOS_WAIT_FOREVER) { Timeout--; } _SlNonOsMainLoopTask(); #ifdef _SlSyncWaitLoopCallback if( __NON_OS_SYNC_OBJ_SIGNAL_VALUE == WaitValue ) { if (WaitValue == *pSyncObj) { *pSyncObj = SetValue; break; } _SlSyncWaitLoopCallback(); } #endif } if (0 == Timeout) { return NONOS_RET_ERR; } else { return NONOS_RET_OK; } }
最后由于Timeout始终大于0导致程序卡死在这里!这个问题怎么解决?非常感谢!
你好,
我也碰到sl_recv不往下执行的问题,我用了超时的方法退出,例程里面有类似这样的代码:
struct SlTimeval_t timeval;
timeval.tv_sec = 0; // Seconds
timeval.tv_usec = 20000; // Microseconds. 10000 microseconds resolution
rawSocket = sl_Socket(SL_AF_RF, SL_SOCK_RAW, eChannel);
// set timeout - in case we have no activity for the specified channel
sl_SetSockOpt(rawSocket,SL_SOL_SOCKET,SL_SO_RCVTIMEO, &timeval, sizeof(timeval)); // Enable receive timeout
status = sl_Recv(rawSocket, DataFrame, sizeof(DataFrame), 0);
设置超时时间就可以退出。
然后,跟你碰到的情况一样,运行一阵子就在_SlNonOsSemGet()的while里面出不来,请问你的问题解决了吗?能跟我分享一下吗?
碰到相同的问题,在 transceiver 模式下,多次更换信道(几十次)再做 sl_Recv 卡死。
开发板使用的是 CC3200 LaunchPad,更新到最新的 ServicePack 后该问题仍然没得到解决。
目前来说更换信道之前,请先关掉socket, 然后再创建,这样就不会挂死。
我也碰到这样问题, 请问你的问题解决了吗 ?
请参考我上面说的,在更换channel之前,先关掉socket, 然后再基于下一个channel来open socket.
这问题不知道解决了没有,感觉TI的东西很难用好啊,到处都是assert,动不动就是个while(1),这产品到底能不能用啊!不能用就直接告诉我们要自己改,省得误导别人!改不好也可以换方案,省得浪费大家时间啊!
我是今年才开始用的,发现可以设置非阻塞运行
您好,我想请教个问题,为什么总是需要更新servicepack_1.0.1.6-2.6.0.5,因为经常导致ConfigureSimpleLinkToDefaultState卡死,我用的TI原装板子,format时选择的1MB,选512K也是一样,debug几次又需要更新了。 麻烦回复一下,谢谢,因为总是这样调试非常麻烦。
什么情况下更换channel? 我们只是调用了sl_RecvFrom接收UDP数据,和它有关系吗。我的也是设置的UDP接收无阻塞,运行一段时间任务会被挂起,查了良久没有想到是在sl_RecvFrom中挂起的,请问怎么解决!