我现在 在调试 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外围电路,晶振,布线,是否有干扰信号导致信号质量不好。