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

DSP6748接收TCP数据 丢包严重(DSP6748+LAN8710A)

      我现在  在调试 DSP6748 接收网口数据并  保存到SD卡的程序,协议为TCP,DSP为客户端,数据源为服务器。

      调试中发现接收数据很慢,应该是丢包严重,数据源在300K每秒左右发送,使用网络调试助手接收  并且用wireshark 监测  数据源没有问题。计算接收到的数据量我的感觉是  每一大包数据,只收到了开头的1460个数据(每一大包数据是132数据头  +采样通道数x2048)。
      我采用的是NDK任务和SD卡读写任务 切换运行。 
      想请教下,是因为配置的问题吗? 是需要改成软件中断还是其他原因呢?

      下面是net配置程序和接收数据的程序,麻烦大神分析下,不胜感激

void NetOpenHook()
{
//hTask = TaskCreate(TcpTest, "TcpTest", OS_TASKPRINORM, OS_TASKSTKNORM, 0, 0, 0);
hEcho = DaemonNew( SOCK_STREAMNC, 0, 7, dtask_tcp_echo, OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );
}

void NetCloseHook()
{
//TaskDestroy(hTask);
DaemonFree(hEcho)
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void TcpTest(void)
{
    // 等待初始化完成
    Task_sleep(100);

    int j;
    int ijk;
    j = 0;
    SOCKET  s;
    struct  sockaddr_in SinDst;
    int i;
    char Title[] = "Tronlong Tcp Client Application";
    char *pBuf;
    struct  timeval timeout;

    HANDLE hBuffer;

    // 为任务分配文件描述符并打开一个会话
    fdOpenSession(TaskSelf());

    // 创建套接字
    //s = socket(AF_INET, SOCK_STREAMNC, IPPROTO_TCP);
    s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(s == INVALID_SOCKET)
    {
        printf("failed socket create (%d)\n", fdError());

        goto error;
    }

    // IP 地址
    mmZeroInit(&SinDst, sizeof(struct sockaddr_in));

    IPN IPAddr;

    if(!ConStrToIPN(IPStr, &IPAddr))
        printf("Invalid address\n\n");

    SinDst.sin_family      = AF_INET;
    SinDst.sin_addr.s_addr = IPAddr;
    SinDst.sin_port        = htons(Port);

    // 超时时间  5秒
    timeout.tv_sec  = 5;
    timeout.tv_usec = 0;
    setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof( timeout ));
    setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof( timeout ));

    // 建立连接
    if(connect(s, (PSA) &SinDst, sizeof(SinDst)) < 0)
    {
        printf("failed connect (%d)\n", fdError());

        goto error;
    }

    printf("Established the connection.\n");
  
    // 测试
    for(;;)
    {
        // 接收数据
            //i = (int)recvnc(s, (void **)&pBuf, 0, &hBuffer);
            for(ijk=0;ijk<10;ijk++)
            {
                    i = (int)recv(s, pBuf, 10000, MSG_WAITALL);

                    if(i > 0)
                    {
                            printf("j:%d   i:%d\n",j++,i);
                    }
                    else
                    {
                            continue;
                    }

            }
                    recvncfree(hBuffer);
                    Task_sleep(10);

    }

    error:
        if(s != INVALID_SOCKET)
            fdClose(s);

    // 关闭文件会话
    fdCloseSession(TaskSelf());
}

Shine:

不加写SD卡功能,单独网口收发也会丢包吗?试试把接收函数里的printf语句去掉。

qi liu17:

回复 Shine:

不加写SD卡功能,也是一样的,printf 语句影响应该没那么大。这么说,300K的数据源,1分钟应该收到18m,但是现在我只收到500K,所以问题很大。

Shine:

回复 qi liu17:

看一下PHY外围电路,晶振,布线,是否有干扰信号导致信号质量不好。

赞(0)
未经允许不得转载:TI中文支持网 » DSP6748接收TCP数据 丢包严重(DSP6748+LAN8710A)
分享到: 更多 (0)