TI中文支持网
TI专业的中文技术问题搜集分享网站

CC3200 udp非阻塞模式,未知延时(大概16ms)

CC3200 在udp_socket工程,设置BsdUdpServer为非阻塞模式,在while(1)一直调用 sl_RecvFrom函数(一直返回-11,这是正常的),当多次快速调sl_RecvFrom,就会出现,大概16ms的延时时间。在调用 sl_RecvFrom后加入大于900us 可解决未知延时问题(但浪费了这个时间,不满足实际使用要求)。

请问,根源是什么,为什么会产生这个延时或未知时间?

//测试代码

while (1)
{
iStatus = sl_RecvFrom(iSockID, g_cBsdBuf, sTestBufLen, 0,
( SlSockAddr_t *)&sAddr, (SlSocklen_t*)&iAddrSize );

if( iStatus < 0 && iStatus != -11)
{
// error
sl_Close(iSockID);
ASSERT_ON_ERROR(RECV_ERROR);
}

lLoopCount++;

//UART_PRINT("iStatus = %d\r\n",iStatus);

UART_PRINT("0");
delay_us(900); //加入大于900us 可解决未知延时问题(但浪费了这个时间,不满足实际使用要求)

if(iStatus>0)
{
  UART_PRINT("11111111111111111111111111111111111111111111111111iStatus = %d\r\n",iStatus);
}
}

user5065865:

Kevin Qiu1:

回复 user5065865:

你的图看不见了,主程序中是否还有其他任务

user5065865:

回复 Kevin Qiu1:

我用的是udp_socket例程更改,改了BsdUdpServer这部分代码,里面直接是while(1)了,没其它任务。这个问题困扰我好久了,一直不知道是什么原因,希望能得到解答。

user5065865:

回复 Kevin Qiu1:

CC3200UDP 问题.docx

user5065865:

回复 Kevin Qiu1:

测试代码main.c

Kevin Qiu1:

回复 user5065865:

你看下发送端是否有增加延时,有可能是发送端产生的延时

user5065865:

回复 Kevin Qiu1:

CC3200没有发送数据,也没有接收到数据,只是一直在监听接收。

Kevin Qiu1:

回复 user5065865:

我觉得应该是标记地方的原因,前几次调用sl_RecvFrom函数时,数据还没有准备好,函数返回错误代码-11。等到数据准备好以后,被复制到应用程序的缓冲区中,sl_RecvFrom函数返回成功后才开始处理数据,在返回值正确之前有一段时间

Kevin Qiu1:

回复 Kevin Qiu1:

加了900us延时后,返回正确值了,就没有16ms的延时了

user5065865:

回复 Kevin Qiu1:

可是sl_RecvFrom函数并未接收到数据,而且也没对CC3200 UDP发送数据,所以应该不会有数据被复制才对呀。

赞(0)
未经允许不得转载:TI中文支持网 » CC3200 udp非阻塞模式,未知延时(大概16ms)
分享到: 更多 (0)