Part Number:TMS320C6748
DSP为C6748,C6748作为服务器,电脑作为客户端;
程序的功能很简单,电脑向C6748发送数据,C6748将接收到的数据回传;
使用NDK实现TCP传输,在TCP.c中,定义了一个全局的套接字g_TcpSocket和全局变量如下:
volatile UINT8 RecDataFlag=0; // 数据接收标志位,接收到上位机的数据时:置1;数据处理完:清0。
volatile UINT32 RecDataNum=0; // 接收到的数据的长度
char *RecDataBuf; // 接收到的数据的指针
HANDLE hBuffer;
SOCKET g_TcpSocket;// 全局套接字
在TCP.c的回调函数TcpTest(SOCKET s, UINT32 unused)中使用send(g_TcpSocket, RecDataBuf, RecDataNum, 0)函数,可以正常的向PC回传数据;
但是我在另外的一个线程msg_thread实现TCP数据发送,send(g_TcpSocket, RecDataBuf, RecDataNum, 0)函数的返回值为-1,而且我也添加了fdOpenSession((HANDLE)msg_thread)和fdCloseSession((HANDLE)msg_thread),
代码如下:
void msg_thread(UArg arg0, UArg arg1)
{
Int msg_thread_cnt=0;
Int tcp_send_rtn=0;
fdOpenSession((HANDLE)msg_thread);
while(1)
{
msg_thread_cnt++;
if(msg_thread_cnt%2000==0) // 10s打印一次数据,监控msg_thread线程是否在运行
{
System_printf("msg_thread is running!\r\n");
System_flush();
}
if(RecDataFlag)
{
System_printf("\r\nmsg_thread while(1) RecDataFlag is :");
System_printf("%d", RecDataFlag);
System_flush();
tcp_send_rtn=send(g_TcpSocket, RecDataBuf, RecDataNum, 0 );
recvncfree(hBuffer);
if(tcp_send_rtn < 0) {
System_printf("\r\nmsg_thread while(1) tcp_send_rtn is :");
System_printf("%d", tcp_send_rtn);
System_flush();
break;
}
RecDataFlag=0;
}
Task_sleep(5);
}
fdCloseSession((HANDLE)msg_thread);
}
请问这是为什么?
user1813602:
问题已经解决了!
原来应该这么用fdOpenSession((HANDLE)句柄),而不是fdOpenSession((HANDLE)msg_thread)。
,
Nancy Wang:
感谢分享!