ucos中任务删除自身后,其他任务不运行了,是怎么回事?
[复制链接]
#include <includes.h>
#define TASK_STK_SIZE 128 //定义任务堆栈的大小
OS_STK TaskOneStack[TASK_STK_SIZE]; //为任务TaskOne建立一个堆栈 OS_STK TaskTwoStack[TASK_STK_SIZE]; //为任务TaskTwo建立一个堆栈 OS_STK TaskThreeStack[TASK_STK_SIZE]; //为任务TaskTwo建立一个堆栈
void TaskOne(void *p_arg); void TaskTwo(void *p_arg); void TaskThree(void *p_arg);
void main(void) { OSInit(); //初始化ucos
//建立任务TaskOne,无数据区指针, 堆栈指针, 优先级6 OSTaskCreate(TaskOne, 0 , &TaskOneStack[TASK_STK_SIZE-1], 6 );
//建立任务TaskTwo,无数据区指针, 堆栈指针, 优先级7 OSTaskCreate(TaskTwo, 0 , &TaskTwoStack[TASK_STK_SIZE-1], 7 );
//建立任务TaskThree,无数据区指针, 堆栈指针, 优先级8 OSTaskCreate(TaskThree, 0 , &TaskThreeStack[TASK_STK_SIZE-1], 8 );
OSStart(); //开始运行ucos }
void TaskOne(void *p_arg) { int x=0; p_arg = p_arg; //无用,仅为消除编译器报警
while (1) //任务体,总是死循环 { x++; if(x==4) { printf("TaskOne: 我要求删除TaskTwo!\n"); //打印 if ( OSTaskDelReq(7) == OS_NO_ERR ) { OSTaskDel(7); //优先级代表任务 printf("TaskOne: 我删除了TaskTwo!\n"); //打印 } else { printf("TaskOne: 我现在还不能删除TaskTwo!\n"); //打印 } }
if(x==10) { OSTimeDlyHMSM(0, 0, 0, 30); printf("TaskOne: 我要求删除自己!\n"); //打印 if ( OSTaskDelReq(6) == OS_NO_ERR ) //删除自己还可以用OS_PRIO_SELF作为参数 { OSTaskDel(6); //优先级代表任务 // OSTaskDel(OS_PRIO_SELF);
printf("TaskOne: 我删除了我自己!\n"); //打印 } else { printf("TaskOne: 没人听得见我说话了……!\n"); //打印 } } printf("TaskOne: 我在运行!\n"); //打印 OSTimeDlyHMSM(0, 0, 1, 0); //延时0小时0分1秒0毫秒 } }
void TaskTwo(void *p_arg) { p_arg = p_arg; //无用,仅为消除编译器报警
while (1) //任务体,总是死循环 { printf(" TaskTwo: 运行中我也!\n"); //打印 OSTimeDlyHMSM(0, 0, 1, 0); //延时0小时0分1秒0毫秒 } }
void TaskThree(void *p_arg) { p_arg = p_arg; //无用,仅为消除编译器报警
while (1) //任务体,总是死循环 { printf(" TaskThree:我思故我在!\n"); //打印 OSTimeDlyHMSM(0, 0, 2, 0); //延时0小时0分2秒0毫秒 } }
程序就是上面的,我从网上找了个做测试,
任务1删除自身后 ,任务3没输出,有人知道是为什么吗?
还是UCOS删除任务只能靠别的任务来删除?
|