TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320C6748: 使用NDK实现TCP传输时,另外的线程实现send()发送的问题

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:

感谢分享!

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6748: 使用NDK实现TCP传输时,另外的线程实现send()发送的问题
分享到: 更多 (0)