uC/OS-II 学习笔记之:任务删除
2013-03-15 12:48
519 查看
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请访问可乐虎博客:
http://blog.csdn.net/dcx1205
相信不会让您失望!!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
一、概念:任务的删除就是把任务由运行态或就绪态置于睡眠态,是任务创建的逆过程。
二、操作:具体操作就是把将待删除的任务的任务控制块从任务控制链表中删除,并归还给空任务控制链表,
然后在任务就绪表中把该任务的就绪状态位置为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原理与实践》
更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请访问可乐虎博客:
http://blog.csdn.net/dcx1205
相信不会让您失望!!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
一、概念:任务的删除就是把任务由运行态或就绪态置于睡眠态,是任务创建的逆过程。
二、操作:具体操作就是把将待删除的任务的任务控制块从任务控制链表中删除,并归还给空任务控制链表,
然后在任务就绪表中把该任务的就绪状态位置为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原理与实践》
相关文章推荐
- uC/OS-II 学习笔记之:任务的概念
- uC/OSII的任务 学习笔记
- uC/OS-II 学习笔记之:任务的优先级别和任务数
- uC/OS-II 学习笔记之:任务挂起与恢复,调度器上锁与解锁!
- uC/OS-II 学习笔记之:任务堆栈
- uC/OS-II 学习笔记:任务创建步骤
- uC/OS-II 学习笔记:任务堆栈
- uC/OS-II 学习笔记之:怎样在uC/OS-II里创建一个任务?
- uC/OS-II 学习笔记:任务控制块ECB
- uC/OS-II 学习笔记之:任务就绪表-举例详解!
- uC/OS-II学习笔记-定义全局变量
- uC/OS-II 学习笔记之:在VC++6.0环境下调试uC/OS-II的源代码分享!
- uc/os-iii学习笔记-任务切换
- uC/OSii 的学习笔记 (1 )
- uC/OS-II 学习笔记:消息邮箱实验
- UC/OS-II学习笔记之消息队列使用
- uc/os ii 学习笔记 2010-03-19 a
- uC/OS-II 学习笔记:事件
- uc/os ii 学习笔记 2010-03-19 b
- uC/OSii 的学习笔记 ( 2 )