我用ZLG的tcpip软件包开发<br />要求能动态修改ip地址,而不能进行硬件复位,该怎么做?<br />我给出如下方案:<br />先建立4个任务,如下所示:<br /> OSTaskCreateExt(TaskB, <br /> (void *)0,<br /> &task1_stack[999],<br /> TASK_1_PRIO,<br /> TASK_1_ID,<br /> &task1_stack[0],<br /> 1000,<br /> (void *)0,//&TaskUserData[TASK_4_ID]<br /> 0);<br /> OSTaskCreateExt(TaskC,<br /> (void *)0,<br /> &task2_stack[1999],<br /> TASK_2_PRIO,<br /> TASK_2_ID,<br /> &task2_stack[0],<br /> 2000,<br /> (void *)0,//&TaskUserData[TASK_4_ID]<br /> 0);<br /> OSTaskCreateExt(TaskD,<br /> (void *)0,<br /> &task3_stack[999],<br /> TASK_3_PRIO,<br /> TASK_3_ID,<br /> &task3_stack[0],<br /> 1000,<br /> (void *)0,//&TaskUserData[TASK_4_ID]<br /> 0);<br /> OSTaskCreateExt(TaskE,<br /> (void *)0,<br /> &task4_stack[1999],<br /> TASK_4_PRIO,<br /> TASK_4_ID,<br /> &task4_stack[0],<br /> 2000,<br /> (void *)0,//&TaskUserData[TASK_4_ID]<br /> 0);<br />这个大家应该都知道。<br />若收到修改ip地址的命令,我做如下处理<br />先删除这4个任务<br /> OSTaskDel(TASK_1_PRIO);<br /> OSTaskDel(TASK_2_PRIO);<br /> OSTaskDel(TASK_3_PRIO);<br /> OSTaskDel(TASK_4_PRIO);<br />然后在用以下命令恢复这4个任务<br /> OSTaskCreateExt(TaskB, <br /> (void *)0,<br /> &task1_stack[999],<br /> TASK_1_PRIO,<br /> TASK_1_ID,<br /> &task1_stack[0],<br /> 1000,<br /> (void *)0,//&TaskUserData[TASK_4_ID]<br /> 0);<br /> OSTaskCreateExt(TaskC,<br /> (void *)0,<br /> &task2_stack[1999],<br /> TASK_2_PRIO,<br /> TASK_2_ID,<br /> &task2_stack[0],<br /> 2000,<br /> (void *)0,//&TaskUserData[TASK_4_ID]<br /> 0);<br /> OSTaskCreateExt(TaskD,<br /> (void *)0,<br /> &task3_stack[999],<br /> TASK_3_PRIO,<br /> TASK_3_ID,<br /> &task3_stack[0],<br /> 1000,<br /> (void *)0,//&TaskUserData[TASK_4_ID]<br /> 0);<br /> OSTaskCreateExt(TaskE,<br /> (void *)0,<br /> &task4_stack[1999],<br /> TASK_4_PRIO,<br /> TASK_4_ID,<br /> &task4_stack[0],<br /> 2000,<br /> (void *)0,//&TaskUserData[TASK_4_ID]<br /> 0);<br />那么新的ip地址生效,也不用复位程序。<br />但是问题是,这个过程只能重复2次,当第3次删除任务并恢复任务后,程序就<br />1、自动重启了(若看门狗已打开)<br />2、停止运行(若看门狗没打开)<br />这是什么原因呢?是ucosii不允许频繁删除同一个任务吗?还是ZLG软件包出了问题?大家是如何解决类似问题的呢??? |
|