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