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

daemonnew函数问题

使用NDk中自带的helloworld工程

do

   {

       rc = NC_NetStart( hCfg, NetworkOpen, NetworkClose, NetworkIPAddr );

   } while( rc > 0 );

语句执行了。

static void NetworkOpen()

{

   // Create our local server

   hHello = DaemonNew( SOCK_DGRAM, 0, 7, dtask_udp_hello,

                      OS_TASKPRINORM, OS_TASKSTKNORM, 0, 1 );

}这个语句设断点也执行了

但是在dtask_udp_hello( SOCKET s, UINT32 unused )

函数中设断点并没有执行。请高手指点

striker Qian:

DaemonNew发起的是一个Thread吧,如果你的回调函数dtask_udp_hello 没有收到socket肯定无法进入。在ndk##\packages\ti\ndk\winapps 下有不少发UDP socket的可执行文件,跑代码的时候发一个socket断点就可以停了。

liang he2:

回复 striker Qian:

你好:

我想问一下,要是我想要主动发送数据而不是收到socket以后才处理回应怎么做呢?

striker Qian:

回复 liang he2:

Hi,

直接发送更加容易,

直接作为client端配置UDP/TCP 包发送,参考以下路径

C:\ti\ndk_2_21_01_38\packages\ti\ndk\tools\console 是个看源代码的好地方,应该有client段示例

C:\ti\ndk_2_21_01_38\packages\ti\ndk\inc\serrno.h 可以看各种fderror的错

C:\ti\ndk_2_21_01_38\packages\ti\ndk\tools\servers各种udp、tcp server都在里面

或者参考spru524,里面有示例代码

autstyh autstyh:

回复 liang he2:

你好,可以使用老的创建线程TaskCreate,这样就可以主动发了。DaemonNew是创建一个守护进程,必须先有数据进来才可以发。

希望能帮到你的忙

liang he2:

回复 autstyh autstyh:

非常感谢你的回答,我之前测试了一下这样的操作,确实可以发了,但是发送完毕以后就不能接收了。。。 所以后来我还是决定做服务器端了。

autstyh autstyh:

回复 liang he2:

这个TaskCreate感觉就是只能在知道对方IP下才能正常工作,写一个收进程,和一个发进程。(在知道对方IP的情况下)就可以边收边发了。。。。。守护进程的话只需一次握手,然后就回记录IP了

liang he2:

回复 autstyh autstyh:

谢谢

还要专门写一个收进程?那个收进程怎么写啊?您有示例的代码吗?虽然我没有准备这么写了,但是很想知道这样的操作怎么做,如果您有现成的代码方便分享一下的话就太好了。

autstyh autstyh:

回复 liang he2:

void tskRcvData(IPN un32ServerIpAddr, UINT16 un16UdpServerPort, Uint8 u8ServerID){    Uint32    u32RcvUdpBufLen;    Uint32     u32RcvBufSize;    //Uint8*  u8RxTmpBuf;    Uint8*  u8AppBuf;    SOCKET     s = INVALID_SOCKET;    struct     sockaddr_in ServerAddr;        //Uint32 i = 0;    //Uint32 *Dst = (Uint32 *)0xA0000000;    while( !NDK_state)    {        TSK_sleep(100);    }    // Allocate the file descriptor environment for this task    fdOpenSession((HANDLE)TSK_self());    // Create UDP socket    s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);    if (s == INVALID_SOCKET)    {        printf("failed socket creation (%d)\n", fdError());        goto LEAVE;    }    bzero(&ServerAddr, sizeof(struct sockaddr_in));    ServerAddr.sin_family           = AF_INET;    ServerAddr.sin_len               = sizeof(ServerAddr);    ServerAddr.sin_addr.s_addr     = un32ServerIpAddr;    ServerAddr.sin_port           = htons(un16UdpServerPort);    //configure the receive buffer size    u32RcvBufSize =TC3_4_BYTE_SRC_REQ*10;// bufsize     setsockopt(s, SOL_SOCKET, SO_RCVBUF, &u32RcvBufSize, sizeof(UINT32) );    // Bind server address    if (bind(s, &ServerAddr, sizeof(ServerAddr)) < 0)    {        printf("bind failed (%d)\n", fdError());        goto LEAVE;    }    while(1)    {                // receiving data from servers        SEM_pendBinary(g_semUdp, SYS_FOREVER);        for(i=0;i<10;i++)        {            if(i == 0)            {                    //timestart1 = CLK_gethtime();             }            u32RcvUdpBufLen = recvfrom(s, (void *)g_u8AppBuf_Tmp,g_u16mpdu_size_byte , MSG_WAITALL, NULL, NULL);    //g_u16mpdu_size_byte                        if(i == 0)            {                    //timestart2 = CLK_gethtime();             }            if (u32RcvUdpBufLen == TC3_4_MPDU_SIZE_BYTE)                mcs = 2;            else if(u32RcvUdpBufLen == TC1_2_MPDU_SIZE_BYTE)                mcs = 1;            else if(u32RcvUdpBufLen == TC1_3_MPDU_SIZE_BYTE)                mcs = 0;            else if(u32RcvUdpBufLen == APP_CONTROL_MPDU)            {                mcs = g_pu8AppBuf_PC[2];            //Tx MCS                //g_mcsTx = mcs;                //g_bRxBufMpduFlag_A[10] = mcs;                //g_bRxBufMpduFlag_B[10] = mcs;            }            else                continue;            if(g_mcsTx != mcs)            {                g_mcsTx = mcs;                SystemInit(g_mcsTx);            }                            //    u8RxTmpBuf = (Uint8 *)(g_pu8AppBuf_PC);            u8AppBuf = (Uint8 *)(g_pu8AppBuf_PC + u32RcvUdpBufLen*i);            pPaRAMSet34->m_wSRC = (Uint32)g_u8AppBuf_Tmp;            pPaRAMSet34->m_wDST = (Uint32)u8AppBuf;                pPaRAMSet34->m_hwACNT = u32RcvUdpBufLen;                *pu32ESRH = 1<<(TCC34-32);                        if(9 == i)            {                //i = 0;                u8AppBuf = (Uint8 *)(g_pu8AppBuf_PC);            /*                timeend1 = CLK_gethtime();                timepay[numbers] = (float)((timeend1 – timestart1)*0.000001);                timepay1[numbers] = (float)((timeend1 – timestart2)*0.000001);                time_save[numbers] = (float)((timeend1 – time_start)*0.000001);                numbers++;                if (numbers == 100)                {                    numbers = 0;                }            */                SEM_postBinary(semFrameProc);                            }        }    } //while(1)LEAVE:    if (s != INVALID_SOCKET)    {        fdClose(s);    }    fdCloseSession((HANDLE)TSK_self());    TSK_exit();}LEAVE:    if (s != INVALID_SOCKET)    {        fdClose(s);    }    fdCloseSession((HANDLE)TSK_self());    TSK_exit();

仅供参考,如有雷同,那就雷同吧。

liang he2:

回复 autstyh autstyh:

大神你好,太感谢了。。

如有雷同必是我抄你的……

autstyh autstyh:

回复 liang he2:

此问题还没有答案么?。。。

赞(0)
未经允许不得转载:TI中文支持网 » daemonnew函数问题
分享到: 更多 (0)