This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于NDK使用时NC_NetStart函数里面的内容怎么理解?他是什么样的过程?

Other Parts Discussed in Thread: SYSBIOS

我的理解是:在实例中发现这个函数虽然包含在while循环里面,但是其实只调用了一次然后网络打开了,之后进入到NetworkOpen()里面,然后执行完DaemonNew以后,在SPRU524中查阅到守护进程是一个网络监视任务,这监视过程中程序没有停下来,那么程序进入idle了吗?为什么不是返回到StackTest任务呢,他的优先级显然是比IDLE更高?

我尝试用如下语句来主动连接服务器:

static void NetworkOpen() {

platform_write("网络系统已经打开:\n");

 hHellotcp = DaemonNew(SOCK_STREAMNC, 0, 7, dtask_tcp_hello, OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );

hHelloudp = DaemonNew(SOCK_DGRAM, 0, 7,dtask_udp_hello,OS_TASKPRINORM, OS_TASKSTKNORM, 0, 1 );

hconnect = TaskCreate(connet_tcp,"connet_test",5,0x2400,0,0,0);

 }

1、调试之后确实连接上PC服务器了,但是从PC端发送下来的TCP数据包不会被dtask_tcp_hello处理,为什么会这样?我的理解是这个守护进程优先级更高应该是当socket包到来时会进入dtask_tcp_hello的吧?

2、我的想法只是把DSP端当作客户端,主动去连接服务器,如果想要网络打开后主动连接服务器应该怎么做才好呢?

3、还有在这里有一个socket到来系统是怎么知道是UDP还是TCP数据包而进入我相应的处理程序的?

  • Hi, 您好!

    3. 从端口号可以知道是UDP还是TCP

    谢谢!

  • 谢谢Kevin Cai的回答。

          但是我在写的时候:

     hHellotcp = DaemonNew(SOCK_STREAMNC, 0, 7, dtask_tcp_hello, OS_TASKPRINORM, OS_TASKSTKNORM, 0, 3 );    

     hHelloudp = DaemonNew(SOCK_DGRAM, 0, 7,dtask_udp_hello,OS_TASKPRINORM, OS_TASKSTKNORM, 0, 1 );

    把两个都设置为一样的端口了,,,这样的话怎么知道是哪一个啊。。不过为什么没有出错?运行成功两个都回复了。。。。

     

    谢谢!

  • Hi, 您好!

    在以太网报文的头部,是包含了TCP和UDP标识的,底层协议栈能识别这个标识,并分发给dtask_tcp_hello或dtask_udp_hello处理

    谢谢!

  • 非常感谢您的回答

    我曾尝试把下面语句的OS_TASKSTKNORM改为具体的一个1024*1024大小,但是这样仿真时socket一连上就会出错:

    hHelloudp = DaemonNew(SOCK_DGRAM, 0, 7,dtask_udp_hello,OS_TASKPRINORM, OS_TASKSTKNORM, 0, 1 );

    错误信息如下:

    ........(各种寄存器的值)

    Exception at 0x80000060
    EFR=0x2 NRP=0x80000060
    Internal exception: IERR=0x2
    Fetch packet exception
    ti.sysbios.family.c64p.Exception: line 248: E_exceptionMin: pc = 0x80000060, sp = 0x8005b4d0.
    To see more exception detail, use ROV or set 'ti.sysbios.family.c64p.Exception.enablePrint = true;'
    xdc.runtime.Error.raise: terminating execution

    请问一下您知道这个是什么原因吗?

x 出现错误。请重试或与管理员联系。