专家你好:
新手学习网口调试,遇到一些问题;
想从PC端通过网口TCP/IP协议发送数据给DSP,用
i = (int)recvnc( s, (void **)&p, 0, &hBuffer );
再用memcpy()函数将数据放入DDR中,当数据为120KB的时候,用网络调试助手可以存入,
但是自己编写的程序,最多只能到9600B,请问是什么原因?谢谢专家解答。
for(;;)
{
i = (int)recvnc( s, (void **)&p, 0, &hBuffer );
if(i >= 0)
{
memcpy(&rectest[0+k],p,i);
send(s,p,i,0);
k=k+i;
// printf("SUCCESS (%d) (%d)\n",i,k);
}
// while(1)
// {
// send(s,sendpBuf,Total_Num,0);
// }
else
{ printf("FINISHED\n");
break;
}
}
Andy Yin1:
你使用的具体是哪款dsp,运行的是TI的例程么,是PC向DSP发送数据超过9600B后就发送失败么,有check DSP软件接收是否有限制么。
Jog zhao:
回复 Andy Yin1:
谢谢专家回复!
我用的是DSP6678,例程是ndk下面的helloWord,DSP向PC发送数据是可以的,反过来DSP接收数据过大就会出错,但是没有check DSP软件接收是否有限制,不知道该如何check DSP软件是否有限制。
用网络调试助手NetAssist可以将数据存入DDR中,而且5.62M的数据完全正确,自己写的PC端程序利用网络调试助手也可以成功发送数据,但是PC与DSP两者之间
联调就会出现错误,想问一下专家问题可能出现在DSP上面,还是PC段程序上面,谢谢专家!
程序里面设置 int bufferlength=64000;
setsockopt( s, SOL_SOCKET, SO_SNDBUF, &bufferlength, sizeof( int ) ); setsockopt( s, SOL_SOCKET, SO_RCVBUF, &bufferlength, sizeof( int ) );
for(;;) {// i=recv(s, (void *)&p, 3080, 0 ); i = (int)recvnc( s, (void **)&p, 0, &hBuffer ); if(i >= 0) {
memcpy(&rectest[0+k],p,i); send(s,p,i,0); k=k+i; recvncfree( hBuffer );// printf("SUCCESS (%d) (%d)\n",i,k); }// while(1)// {// send(s,sendpBuf,Total_Num,0);// } else { printf("FINISHED\n"); break; } }
Jog zhao:
回复 Andy Yin1:
现在发现当PC向DSP发送数据的时候,DSP一直在接收,开始的时候比较快,当数据到达135840B的时候,数据就接收的非常慢,还是在接收数据,请问是什么原因,
PC发送程序是自己编的,现在不知道是哪边的问题,谢谢专家解答!
Han Wu4:
回复 Andy Yin1:
你好,我也是这个问题,请问你问题解决了吗?