任务的创建

UCOSII通过任务控制块来管理任务,创建任务的工作实质上是创建一个任务控制块,并通过任务控制块把任务代码和任务堆栈关联起来形成一个完整的任务。
还要使刚创建的任务进入就绪态,并接着引发一次任务调度。

创建任务函数 OSTaskCreate()、OSTaskCreateExt(),OSTaskCreateExt()是OSTaskCreate()的扩展,提供了一些附加功能。


INT8U OSTaskCreate(
                void (* task)(void * pd) 指向任务的指针
                void * pdata,              传递给任务的参数
                OS_STK * ptos,    指向任务堆栈栈顶的指针
                INT8U prio    任务的优先级
                  ) 
{
     #if OS_CRITICAL_METHOD == 3u
        OS_CPU_SR cpu_sr = 0u
     #endif
    void * psp;
    INT8U err;
    if(prio>OS_LOWEST_PRIO)
    {
        return (OS_PRIO_INVALID);
    }
    OS_ENTER_CRITICAL();
    if(OSTCBPrioTbl[prio]==(OS_TCB *)0)确认优先级未被使用过
    {
        OSTCBPrioTbl[prio]==(OS_TCB *)1;保留优先级
        OS_EXIT_CRITICAL();
        psp=(void*)OSTaskStkInit(//初始化任务堆栈
                                    task,
                                    pdata,
                                    ptos,
                                    0
                                  );
        err=OSTCBInit(//获得初始化任务控制块
                            prio,
                            psp,
                            (void *)000,
                            (void *)00
                        );
        if(err==OS_NO_ERR)
        {
            OS_ENTER_CRITICAL();
            OSTaskCtr++;//任务计数器加1
            OS_EXIT_CRITICAL();
            if(OSRunnig)
            {
                OSSched();//任务调度
            }
        }
        else
        {
            OS_ENTER_CRITICAL();
            OSTCBPrioTbl[prio]=(OS_TCB)0;//放弃任务
            OS_EXIT_CRITICAL();
        }
        return(err);
    }
    else
    {
        OS_EXIT_CRITICAL();
        return (OS_PRIO_EXIST);
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值