uC/OS-II 学习笔记之:任务删除

一、概念:任务的删除就是把任务由运行态或就绪态置于睡眠态,是任务创建的逆过程。

二、操作:具体操作就是把将待删除的任务的任务控制块从任务控制链表中删除,并归还给空任务控制链表,
然后在任务就绪表中把该任务的就绪状态位置为0,这样任务就不会再被调度器调用了。
一般情况,为了安全起见,我们先在某个任务中提出删除任务的请求,然后再在将待删除任务中执行删除操作,
即由待删除任务自己删除自己,而提出删除任务请求的任务只负责提出请求。这样的好处是可以让待删除任务
在合适的时候删除自己,以利于在删除自身之前释放掉其占用的资源。

三、函数
(1)请求删除任务函数:OSTaskDelReq(prio)//prio为待删除任务的优先级别
(2)提出删除请求的任务在调用该函数时,具体使用如下:
//只有当待删除任务不存在了,就跳出循环
while (OSTaskDelReq(1) != OS_TASK_NOT_EXIST)
{
OSTimeDly(1);//延时一个时钟节拍
}
(3)待删除任务在调用该函数时,具体使用如下:
if (OSTaskDelReq(OS_PRIO_SELF) == OS_TASK_DEL_REQ)
{
OSTaskDel(OS_PRIO_SELF);//删除任务自身
}

四、典型应用
//调用删除任务函数的任务
//任务1,设优先级别为1
void TaskLed0(void *pdata)
{
while (1)
{
LED0 = !LED0;
OSTimeDlyHMSM(0, 0, 0, 400);
while (OSTaskDelReq(2) != OS_TASK_NOT_EXIST)
{
OSTimeDly(1);//延时一个时钟节拍
}
}
}

//被删除任务
//任务2,设优先级别为2
void TaskLed1(void *pdata)
{
while (1)
{
LED1 = !LED1;
OSTimeDlyHMSM(0, 0, 0, 400);
//判断是否有其它任务发出了删除自身的请求
if (OSTaskDelReq(OS_PRIO_SELF) == OS_TASK_DEL_REQ)
{
OSTaskDel(OS_PRIO_SELF);//删除任务自身
}
}
}
解析:这就是一个在任务1里提出删除任务2的请求,然后任务2删除自身的例子。

参: 任哲 《嵌入式实时操作系统uC/OS-II原理及应用》
参: 卢有亮 《嵌入式实时操作系统uC/OS原理与实践》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值