uc/os-ii删除任务

这篇博客探讨了uC/OS-II操作系统中任务删除的相关函数,包括删除任务函数和请求删除任务函数的工作原理。文章指出,删除任务时需要考虑资源的释放,以避免资源丢失。任务B可以请求删除任务A,A在释放资源后自行调用删除函数完成删除。任务B通过检查任务删除请求并适当挂起自身来确保任务A有机会执行资源释放操作。
摘要由CSDN通过智能技术生成

uC/OS-II中与删除任务相关的函数有两个,删除任务函数OSTaskDel() 和请求删除任务函数OSTaskDelReq()

  • 删除任务函数源码如下,主要工作:
    1. 判断参数的有效性
    2. 把要删除的任务从任务就绪表中删除
    3. 使被删除的任务不等待延时期满 ,不会被ISR置于就绪状态,ptcb->OSTCBDly = 0;
    4. 使被删除的任务不被OSTaskResume()激活 ptcb->OSTCBStat = OS_STAT_RDY;
    5. 从优先级列表中删除被删除的TCB,在双向链表中去掉被删除的TCB 。
INT8U  OSTaskDel (INT8U prio)
{
#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
    OS_FLAG_NODE *pnode;
#endif
    OS_TCB       *ptcb;
#if OS_CRITICAL_METHOD == 3                             /* Allocate storage for CPU status register    */
    OS_CPU_SR     cpu_sr = 0;
#endif



    if (OSIntNesting > 0) {                             /* See if trying to delete from ISR            */
        return (OS_ERR_TASK_DEL_ISR);
    }
    if (prio == OS_TASK_IDLE_PRIO) {                    /* Not allowed to delete idle task             */
        return (OS_ERR_TASK_DEL_IDLE);
    }
#if OS_ARG_CHK_EN > 0
    if (prio >= OS_LOWEST_PRIO) {                       /* Task priority valid ?                       */
        if (prio != OS_PRIO_SELF) {
            return (OS_ERR_PRIO_INVALID);
        }
    }
#endif

    OS_ENTER_CRITICAL();
    if (prio == OS_PRIO_SELF) {                         /* See if requesting to delete self            */
        prio = OSTCBCur->OSTCBPrio;                     /* Set priority to delete to current           */
    }
    ptcb = OSTCBPrioTbl[prio];
    if (ptcb == (OS_TCB *)0) {                          /* Task to delete must exist                   */
        OS_EXIT_CRITICAL();
        return (OS_ERR_TASK_NOT_EXIST);
    }
    if (ptcb == 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值