UCOSII任务挂起,删除,恢复


任务挂起函数:       INT8U  OSTaskSuspend (INT8U prio);将优先级别为prio的任务挂起,挂起任务就是停止任务的运行,并触发一次调度。
任务恢复函数:       INT8U  OSTaskResume (INT8U prio);将优先级为prio的任务恢复,恢复任务就是让挂起的任务进入就绪状态,并触发一次调度。
任务请求删除函数:INT8U  OSTaskDelReq (INT8U prio);请求删除优先级别prio的任务。
任务删除函数:        INT8U  OSTaskDel (INT8U prio);删除优先级为prio的任务,删除任务之后,任务身份吊销了,没法再运行了。

 

在任务TaskKey中,我们循环扫描键值,如果KEY0按下,那么调用
  OSTaskSuspend(LED_TASK_Prio);
  OSTaskSuspend(LCD_TASK_Prio);

将任务TaskLed和任务TaskLCD挂起,这个时候,任务将不在执行(LED0停止闪烁,LCD停止循环显示),处于等待状态直到在其他任务中调用解挂函数OSTaskResume()将任务解挂。

如果KEY1按键,将调用函数:
     OSTaskResume(LED_TASK_Prio);
  OSTaskResume(LCD_TASK_Prio);

将任务TaskLed和任务TaskLCD恢复,这个时候,任务将重新开始进入就绪状态,并引发一次任务调度。我们便可以看到LED0恢复闪烁,LCD恢复循环显示。

如果KEY2按键按下,那么将调用函数:
        OSTaskDelReq(LED_TASK_Prio);
  OSTaskDelReq(LCD_TASK_Prio);


请求将任务TaskLed和TaskLCD删除,记住,这里只是请求而不是删除。那么在任务TaskLed和TaskLCD执行的时候,将同时调用这个方法判断是否有任务删除请求,如果有那么将执行删除操作:
     if(OSTaskDelReq(OS_PRIO_SELF)==OS_TASK_DEL_REQ)
   OSTaskDel(OS_PRIO_SELF);
  
也就是说,删除任务是分两步来执行,第一步为请求删除任务,第二步才是删除任务。这样做的好处是在系统设计的时候避免直接删除导致任务有些资源没有释放而导致系统运行不正常。

删除任务之后,任务TaskLed和TaskLCD将处于睡眠状态,将不会被系统调度。这个时候可以看到LED0不再闪烁,LCD也不会循环显示。

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值