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

CC3200 UDP 非阻塞模式下,使用sl_RecvFrom函数接收数据,每调用sl_RecvFrom函数40多次的时候,就会出现大概16ms的延时时间,请问下如何去掉这个延时时间?

CC3200 UDP 非阻塞模式下,使用sl_RecvFrom函数接收数据,每调用sl_RecvFrom函数40多次的时候,就会出现大概16ms的延时时间,请问下如何去掉这个延时时间?测试程序:修改udp_socket 例程。

int BsdUdpServer(unsigned short usPort)
{
    SlSockAddrIn_t  sAddr;
    SlSockAddrIn_t  sLocalAddr;
    int             iCounter;
    int             iAddrSize;
    int             iSockID;
    int             iStatus;
    long            lLoopCount = 0;
    short           sTestBufLen;
    // filling the buffer
    for (iCounter=0 ; iCounter<BUF_SIZE ; iCounter++)
    {
        g_cBsdBuf[iCounter] = (char)(iCounter % 10);
    }
    sTestBufLen  = BUF_SIZE;
    //filling the UDP server socket address
    sLocalAddr.sin_family = SL_AF_INET;
    sLocalAddr.sin_port = sl_Htons((unsigned short)usPort);
    sLocalAddr.sin_addr.s_addr = 0;
    iAddrSize = sizeof(SlSockAddrIn_t);
    // creating a UDP socket
    iSockID = sl_Socket(SL_AF_INET,SL_SOCK_DGRAM, 0);
    if( iSockID < 0 )
    {
        // error
        ASSERT_ON_ERROR(SOCKET_CREATE_ERROR);
    }
    // binding the UDP socket to the UDP server address
    iStatus = sl_Bind(iSockID, (SlSockAddr_t *)&sLocalAddr, iAddrSize);
    if( iStatus < 0 )
    {
        // error
        sl_Close(iSockID);
        ASSERT_ON_ERROR(BIND_ERROR);
    }
 
   //*************************************************************************************
    udp_socket_opt_set(iSockID); //设置非阻塞模式
       while (1)
    {
        iStatus = sl_RecvFrom(iSockID, g_cBsdBuf, sTestBufLen, 0,( SlSockAddr_t *)&sAddr, (SlSocklen_t*)&iAddrSize );        if(iStatus>0)
        {
           lLoopCount++;
                    UART_PRINT("\r\n lLoopCount = %d",lLoopCount);                 }
               //IO取输出   使用逻辑分析仪查看IO输出情况  5430.IO输出情况.docx
        GPIO_OUT(GPIOA1_BASE, 0x2,0);         GPIO_OUT(GPIOA1_BASE, 0x2,1);
    }
   //*************************************************************************************
    UART_PRINT("Recieved %u packets successfully\n\r",g_ulPacketCount);
    //closing the socket after receiving 1000 packets
    sl_Close(iSockID);
    return SUCCESS;
}
void udp_socket_opt_set(int16_t iSockID)
{
    SlSockNonblocking_t enableOption;
 
    enableOption.NonblockingEnabled = 1;
    sl_SetSockOpt(iSockID,SL_SOL_SOCKET,SL_SO_NONBLOCKING, (uint8_t *)&enableOption,sizeof(enableOption)); // 使能/禁止非阻塞模式,默认阻塞模式
}
void GPIO_OUT(unsigned long GPIO_BASE,unsigned char PIN,unsigned char value)
{      switch(value)
    {
       //case 0: GPIOPinWrite(GPIO_BASE,PIN,0); break;
       //case 1: GPIOPinWrite(GPIO_BASE,PIN,PIN); break;
      case 0: HWREG(GPIO_BASE + (GPIO_O_GPIO_DATA + (PIN << 2))) = 0;break;
      case 1: HWREG(GPIO_BASE + (GPIO_O_GPIO_DATA + (PIN << 2))) = PIN;break;         }
}
Alvin Chen:

你每次发送的data 一样吗?

user5065865:

回复 Alvin Chen:

CC3200 没发送数据到PC,CC3200只是一直查询接收数据。

Alvin Chen:

回复 user5065865:

"CC3200 UDP 非阻塞模式下,使用sl_RecvFrom函数接收数据" 你没有数据给CC3200对吧,那应该没有差异的。

user5065865:

回复 Alvin Chen:

对的,可是我测试结果,并不是这样的,您查一下逻辑分析仪的波形就知道 了,我已经上传输了的,您可以自己测试一下,板子是官方的CC3200板子

user5065865:

回复 Alvin Chen:

通过串口打印的结果,CC3200 并没有接收到数据,所以可以排除,是接收数据影响到IO输出的情况,再者通过IO的输出波形看出在不正常的时候IO都是保持为高电平,所以确定是接收函数占用了时间。

经过测试UDP是能正常接收数据的。

Alvin Chen:

回复 user5065865:

我找了一个同事帮你测试请在下面的链接跟进;
e2e.ti.com/…/785049

user5065865:

回复 Alvin Chen:

好的,谢谢您

Alvin Chen:

回复 user5065865:

请在那个帖子上面提供更多的细节。

user5065865:

回复 Alvin Chen:

ok

赞(0)
未经允许不得转载:TI中文支持网 » CC3200 UDP 非阻塞模式下,使用sl_RecvFrom函数接收数据,每调用sl_RecvFrom函数40多次的时候,就会出现大概16ms的延时时间,请问下如何去掉这个延时时间?
分享到: 更多 (0)