本帖最后由 utada08 于 2018-4-23 17:28 编辑
我现在 在调试 DSP6748 接收网口数据并 保存到SD卡的程序,协议为TCP,DSP为客户端,数据源为服务器。
调试中发现接收数据很慢,应该是丢包严重,数据源在300K每秒左右发送,使用网络调试助手接收 并且用wireshark 监测 数据源没有问题。计算接收到的数据量我的感觉是 每一大包数据 只收到了开头的1460个数据(每一大包数据是132数据头 +采样通道数x2048)。
我使用的是创龙的开发板,例程做了小修改(TCP_client),采用的是NDK任务和SD卡读写任务 切换运行。
想请教下是 因为配置的问题吗? 是需要改成软件中断还是其他原因呢?
下面是接收数据的程序,麻烦大神分析下,不胜感激
void TcpTest(void)
{
// 等待初始化完成
Task_sleep(100);
printf("Trying to connect 192.168.1.10:8000 ......\n");
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());
}
|