uCOS-Ⅲ学习笔记: 任务删除

举报
JeckXu666 发表于 2022/01/17 22:52:37 2022/01/17
【摘要】 任务删除原理 简介设置挂起删除有关函数以及变量调用流程 简介 把任务所在的各个可以调用的列表都删除,使任务不能在被调用,进而进入休眠状态 设置挂起删除有关函数以及变量 任务宏定义:无其...

简介

把任务所在的各个可以调用的列表都删除,使任务不能在被调用,进而进入休眠状态

设置挂起删除有关函数以及变量

  1. 任务宏定义:无其他宏定义,仅仅一个删除函数
  2. 编写调度函数
OSTaskDel
(
    OS_TCB *tcb 
    OS_ERR *err
)
//(任务删除函数)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 创建临界段调用参数
CPU_SR_ALLOC();

  
 
  • 1
  • 判断不能为空闲任务TCB
	/* 不允许删除空闲任务 */
	if (p_tcb == &OSIdleTaskTCB) 
	{                          
        *p_err = OS_ERR_TASK_DEL_IDLE;
        return;
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 判断传入TCB==0?(等于0,则令TCB=OSTCBCurPtr)
	/* 删除自己 */
	if (p_tcb == (OS_TCB *)0) 
	{                             
        CPU_CRITICAL_ENTER();
        p_tcb  = OSTCBCurPtr;                               
        CPU_CRITICAL_EXIT();
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 进入临界段
  • 判断传入TCB的状态(switch判断)根据任务状态,把任务移除出对应的列表,延时、移除时基,就绪、移出就绪等等,等待、移出等待列表
	/* 根据任务的状态来决定删除的动作 */
    switch (p_tcb->TaskState) 
	{
        case OS_TASK_STATE_RDY:
             OS_RdyListRemove(p_tcb);
             break;

        case OS_TASK_STATE_SUSPENDED:
             break;

        /* 任务只是在延时,并没有在任何等待列表*/
		case OS_TASK_STATE_DLY:        
        case OS_TASK_STATE_DLY_SUSPENDED:
             OS_TickListRemove(p_tcb);
             break;

        case OS_TASK_STATE_PEND:
        case OS_TASK_STATE_PEND_SUSPENDED:
        case OS_TASK_STATE_PEND_TIMEOUT:
        case OS_TASK_STATE_PEND_TIMEOUT_SUSPENDED:
             OS_TickListRemove(p_tcb);	
		*p_err = OS_ERR_STATE_INVALID;
        return;
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 初始化已删除任务值为默认值
OS_TaskInitTCB(p_tcb);

  
 
  • 1
  • 修改任务状态为删除态
/* 修改任务的状态为删除态,即处于休眠 */
    p_tcb->TaskState = (OS_STATE)OS_TASK_STATE_DEL;      

  
 
  • 1
  • 2
  • 退出临界段
  • 任务切换(任务状态改变后都要进行任务切换)

调用流程

  1. 调用 - 在任务中直接根据需求使用
OSTaskDle(&Task1_TCB,&err);

  
 
  • 1

文章来源: blog.csdn.net,作者:JeckXu666,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_45396672/article/details/110099310

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。