This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/CC3200-LAUNCHXL:CC3200 UDP 套接字出现未知延迟

Guru**** 2782485 points

Other Parts Discussed in Thread: CC3200SDK

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/910945/ccs-cc3200-launchxl-cc3200-udp-socket-appears-unknown-delay

器件型号:CC3200-LAUNCHXL
Thread 中讨论的其他器件:CC3200SDK

工具/软件:Code Composer Studio

您好!

SDK:CC3200SDK_1.5.0

我使用 UDP_Socket 项目它看起来存在未知延迟(大约16ms)、 基于此项目、只修改 了以下部分:

int BsdUdpServer (unsigned short usPort)
{
SlSockAddrIn_t sAddr;
SlSockAddrIn_t sLocalAddr;
内部 iCounter;
内部 iAddrSize;
内部 iSockID;
内部 iStatus;
长 lLoopCount = 0;
短整型 sTestBufLen;

INT 计数= 0;


//填充缓冲区
for (iCounter=0;iCounter "istatus="%d\r\n",iStatus);" uart_print("0");="" delay_us(900);="" if(istatus="">0)
{
UART_PRINT ("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111iStatus =%d\r\n、iStatus);
}
}

UART_PRINT ("成功接收到%u 数据包\n\r"、g_ulPacketCount);

//接收1000个数据包后关闭套接字
sl_close (iSockID);

返回成功;
} 

/
// 主要功能
//*********
void main()
{
long lRetVal =-1;

//
//电路板初始化
//
BoardInit();

//
// UDMA 初始化
//
UDMAInit();

//
//为所使用的外设配置 pinmux 设置
//
PinMuxConfig();

//
//配置 UART
//
InitTerm();

//
//显示横幅
//
DisplayBanner (application_name);

InitializeAppVariables();

//
//以下函数通过清除将器件配置为默认状态
// NVMEM 中存储的持久设置(即连接配置文件&
//策略、电源策略等)
//
//如果开发人员确定,应用程序可以选择跳过此步骤
//设备在开始应用时处于所需状态
//
//请注意,在上完成的所有配置文件和持久设置
//设备将丢失
//
lRetVal = ConfigureSimpleLinkToDefaultState();

if (lRetVal < 0)
{
if (device_no_in_station)== lRetVal)
UART_PRINT ("未能将器件配置为其默认状态\n\r");

loop_forever ();
}

UART_PRINT ("设备已配置为默认状态\n\r");

//
//摘要是设备已配置为工作站模式
//且处于默认状态
//
lRetVal = sl_Start (0、0、0);
if (lRetVal < 0 || lRetVal!= Role_STA)
{
UART_PRINT ("启动设备失败\n\r");
loop_forever ();
}

UART_PRINT ("设备作为工作站启动\n\r\n);

UART_PRINT ("正在连接到 AP:%s ...\r\n"、SSID_NAME);

//
//连接到 WLAN AP
//
lRetVal = WlanConnect();
if (lRetVal < 0)
{
UART_PRINT ("无法建立与 AP \n\r\n 的连接);
loop_forever ();
}

UART_PRINT ("已连接到 AP:%s \n\r"、SSID_NAME);

UART_PRINT ("设备 IP:%d.%d.%d.%d.%d\n\r\n",
SL_IPV4_BYTE (g_ulIpAddr、3)、
SL_IPV4_BYTE (g_ulIpAddr、2)、
SL_IPV4_BYTE (g_ulIpAddr、1)、
SL_IPV4_BYTE (g_ulIpAddr、0));


lRetVal = BsdUdpServer (port_NUM);
if (lRetVal < 0)
{
ERR_PRINT (lRetVal);
loop_forever ();
}


//#ifdef USER_INPUT_ENABLE
// lRetVal = userInput ();
// if (lRetVal < 0)
//{
// ERR_PRINT (lRetVal);
// loop_forever ();
//}
//
//#else
// lRetVal = BsdUdpClient (port_NUM);
// if (lRetVal < 0)
//{
// ERR_PRINT (lRetVal);
// loop_forever ();
//}
//
lRetVal = BsdUdpServer (port_NUM);
// if (lRetVal < 0)
//{
// ERR_PRINT (lRetVal);
// loop_forever ();
//}
//#endif

UART_PRINT ("正在退出应用程序...\n\n");

//
//关闭网络处理器
//
lRetVal = sl_Stop (sl_stop_timeout);

while (1)
{
_slNonOsMainLoopTask();
}
}

//********* 

如果我在代码中添加延迟表示"delay_us (900)"、则未知的延迟时间将消失。如果不是、将显示为"关于"  

16ms 延迟时间、如下图。为什么?您可以在这里提供帮助?

逻辑分析仪记录 串行端口输出波形的 TX 引脚 :

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kevin:

    您使用的是什么客户? 请记住、默认情况下套接字 API 处于阻塞状态。 您是否能够确定在环路中发生延迟的位置(例如在 sl_Recvfrom 处)?

    此致、

    Sarah

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sarah、

    感谢你的答复。 实际上,客户端不工作,仅使用 BsdUdpServer 功能。 如下所示:

    套接字 API 已设置为非阻塞模式,我将把 main.c 文件上载到附件中、请查看。  延迟发生 在 sl_Recvfrom 处。
    此外、当我创建一个 TCPClient 和一个 UDPServer 时、两者都设置为非阻塞、它可以正常工作。 当 TCPCLient 连接成功时、在 TCP 循环中、UDP 扫描数据接收会出现相同的16ms 未知延迟问题;在删除 TCP 扫描或 UDP 扫描时、也会出现未知延迟;当既不扫描也不接收时、将不会出现未知延迟。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    您能在这里提供一些方法吗?

    此致、

    Kevin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kevin:

    在本示例中,您可能只运行服务器,但我的问题是,您使用什么客户端来连接此服务器?

    我无法理解您已经调试的内容。

    1. "当我创建一个 TCPClient 和一个 UDPServer 时、两者都设置为非阻塞、它可以正常工作。"
      1. 为什么要使用 UDP 服务器和 TCP 客户端? 它们应该是相同的协议。 TCP 有错误检查,需要发件人回复。 UDP 没有错误检查。

    2. "当 TCPCLient 连接成功时、在 TCP、UDP 扫描数据接收循环中、将发生相同的16ms 未知延迟问题"
      1. UDP 扫描数据接收的含义是什么?

    此致、

    Sarah

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sarah、

    抱歉、客户的描述可能不清楚、问题与以下问题相同:

    https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/p/694038/2569135?tisearch=e2e-sitesearch&keymatch=CC3200%252525252525252520udp#2569135

    他使用了同样的方法,但 问题仍然没有解决。

    此致、

    Kevin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kevin:

    如线程所述、请验证客户是否具有:

    1. 已刷新 最新的 CC3200服务回路、当前为1.0.1.14-2.12.2.8。
    2. 如果功耗不是问题、请将 NWP 电源策略设置为始终开启。
    3. 如果减少的 Rx 吞吐量是可以接受的、则禁用 Rx 数据包聚合。
    4. 在服务器和客户端上使用 UDP 进行了测试。 不要在同一套接字上混合 UDP 和 TCP 协议。

    正如线程状态、延迟变化是正常的。 延迟是问题还是数据吞吐量问题?

    此致、
    Sarah