CC3200 TCP通信速度特别慢,寻求原因
时间:10-02
整理:3721RD
点击:
本人打算用CC3200(A)发送TCP数据包给CC3200(B),他俩都作为STA模式连接在路由上,能够正常收,但是速度特别慢,几乎1分钟只能收到0.1mb,我试着将发送端每次发送的包调的大一点,结果还是一样的速度,为了排除每次断开重连的原因,我让A持续发送数据给B,结果仍然特别慢,我试着去排除他们两个的问题,我把电脑连到路由,用发送端A发给电脑,电脑端接收速度很快,排除了发送端的问题,结果用电脑又给接收端B每隔1ms发送数据,接收端也收的很快……不知道为什么用A去给B发就会出现速度特别慢的问题,附上代码(代码中是每发送10包断开重连继续发送),还请麻烦大家帮我分析一下原因,谢谢了!
while(1) { // creating a TCP socket iSockID = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, 0); if( iSockID < 0 ) { ASSERT_ON_ERROR(SOCKET_CREATE_ERROR); } iStatus = sl_Connect(iSockID, ( SlSockAddr_t *)&sAddr, iAddrSize); if( iStatus < 0 ) { // error sl_Close(iSockID); ASSERT_ON_ERROR(CONNECT_ERROR); } for(i=0;i<10;i++) {// sending packet g_cBsdBuf[BUF_SIZE-6]=(char)lLoopCount>>24; g_cBsdBuf[BUF_SIZE-5]=(char)lLoopCount>>16; g_cBsdBuf[BUF_SIZE-4]=(char)lLoopCount>>8; g_cBsdBuf[BUF_SIZE-3]=(char)lLoopCount; iStatus = sl_Send(iSockID, g_cBsdBuf, 262, 0 );if( iStatus < 0 ){ // error sl_Close(iSockID); ASSERT_ON_ERROR(SEND_ERROR);} lLoopCount++; } sl_Close(iSockID); MAP_UtilsDelay(8000000); }
以上是发送端;
int Ret,lLoopCount; int socketID[4] = {-1, -1, -1, -1}; for(i = 0; i < 4; i ++) { if(socketID[i] < 0) { socketID[i] = sl_Accept(serverID, ( struct SlSockAddr_t *)&sAddr, (SlSocklen_t*)&iAddrSize); } if(socketID[i] > 0) { int LOOP; UART_PRINT("\n\rReceiving:\n\r"); for(LOOP = 0;LOOP < 1024 ; LOOP++) { Ret = sl_Recv(socketID[i], g_cBsdBuf, 1000, 0); for ( lLoopCount = 0;lLoopCount < Ret;lLoopCount++) { MAP_UARTCharPut(UARTA0_BASE,g_cBsdBuf[lLoopCount]); } memset(g_cBsdBuf,0,sizeof(g_cBsdBuf)); } } } for(i = 0; i < 4; i ++) { sl_Close(socketID[i]); socketID[i]= -1; }
以上是接收端。
每发送10包断开重连继续发送-----快速发送可以不用断开,直接向目的地址的IP+端口号发送数据即可
我试过不断开,速度仍然特别特别慢
经过检查,发现是发送端速度太快没有进行限制,接收端用uart输出速度太慢造成数据堆挤,将发送端速度降低便可。
UART可采用FIFO+DMA的方式提高使用效率,提高数据的传输效率