有时候,如果任务A拥有内存缓冲区或信号量之类的资源,而任务B想删除该任务,这些资源就可能由于没被释放而丢失。在这种情况下,用户可以想法子让拥有这些资源的任务在使用完资源后,先释放资源,再删除自己。用户可以通过OSTaskDelReq()函数来完成该功能。
函数名 | OSTaskDelReq |
参数 | Prio要删除任务的优先级(0xFF表示当前任务) |
功能描述 | 请求删除任务 |
函数原型 | INT8U OSTaskDelReq(INT8U prio) |
核
心
代
码 | { if (prio == OS_PRIO_SELF) //判断调用此函数时,是否使用0xFF表示当前函数的优先级 { //调用该函数时,如果要删除当前任务,不知道优先级,可以使用0xFF代替
OS_ENTER_CRITICAL(); //进入临界区0 stat = OSTCBCur->OSTCBDelReq; //当前任务收到删除请求 //当被删除任务被调度时,会检查OSTCBDelReq的值 //为OS_TASK_DEL_REQ时,调用OSTaskDel()
OS_EXIT_CRITICAL(); //退出临界区0
return (stat); }
OS_ENTER_CRITICAL(); //进入临界区0 ptcb = OSTCBPrioTbl[prio]; if (ptcb != (OS_TCB *) 0) //判断要删除的任务是否存在 { ptcb->OSTCBDelReq = OS_TASK_DEL_REQ; //要删除的任务收到删除请求(记录在TCB中) err = OS_NO_ERR; } else //删除的任务不存在 { err = OS_TASK_NOT_EXIST; // } OS_EXIT_CRITICAL(); //退出临界区0
return (err); //返回删除的信息 } |