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.

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());
}