开启socket后,TCP 客户端,用send()函数发送数据,服务端能接收到数据,但是程序却循环卡死了,
不久便收到HCI_EVENT_CC3000_CAN_SHUT_DOWN事件,点电重启了?
已经花了3天跟踪调试了,发现在调用send()后,模块返回了HCI_EVNT_DATA_UNSOL_FREE_BUFF事件,使得
tSLInformation.usEventOrDataReceived =0; 而SimpleLinkWaitEvent(HCI_EVNT_SEND, &tSocketSendEvent); 里面需要tSLInformation.usEventOrDataReceived !=0,才执行解事件,所以卡死在这里。
也正是因为收到HCI_EVNT_DATA_UNSOL_FREE_BUFF事件,才会有HCI_EVENT_CC3000_CAN_SHUT_DOWN,官方的代码如下:
case HCI_EVNT_DATA_UNSOL_FREE_BUFF:
{
hci_event_unsol_flowcontrol_handler(event_hdr); //
NumberOfReleasedPackets = tSLInformation.NumberOfReleasedPackets;
NumberOfSentPackets = tSLInformation.NumberOfSentPackets; //01
if (NumberOfReleasedPackets == NumberOfSentPackets)
{
if (tSLInformation.InformHostOnTxComplete)
{
tSLInformation.sWlanCB(HCI_EVENT_CC3000_CAN_SHUT_DOWN, NULL, 0);
}
}
return 1;
}
所以很奇怪,调用send()后,为什么会返回 HCI_EVNT_DATA_UNSOL_FREE_BUFF事件,而且我读了模块内部的缓存序列,是有6个为空的,应该不会有溢出之类的啊??
其他初始化和配置都很正常,