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.
我的理解是:在实例中发现这个函数虽然包含在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数据包而进入我相应的处理程序的?
谢谢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 );
把两个都设置为一样的端口了,,,这样的话怎么知道是哪一个啊。。不过为什么没有出错?运行成功两个都回复了。。。。
谢谢!
非常感谢您的回答
我曾尝试把下面语句的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
请问一下您知道这个是什么原因吗?