UCOS_II学习笔记---任务管理之建立任务函数分析

本文介绍如何使用μC/OS-Ⅱ操作系统中的OSTaskCreate()函数创建任务,包括函数参数说明及核心代码分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   想让μC/OS-Ⅱ管理用户的任务,用户必须要先建立任务。用户可以通过传递任务地址和其它参数到以下两个函数之一来建立任务:OSTaskCreate() 或 OSTaskCreateExt()。OSTaskCreate()与μC/OS是向下兼容的,OSTaskCreateExt()是OSTaskCreate()的扩展版本,提供了一些附加的功能。用两个函数中的任何一个都可以建立任务。任务可以在多任务调度开始前建立,也可以在其它任务的执行过程中被建立。在开始多任务调度(即调用OSStart())前,用户必须建立至少一个任务。任务不能由中断服务程序(ISR)来建立。

 

函数

功能描述

OSTaskCreate()

建立任务

OSTaskCreateExt()

建立任务

 

函数名 OSTaskCreate
参数 task是任务代码的指针
pdata是当任务开始执行时传递给任务的参数的指针
ptos是分配给任务的堆栈的栈顶指针
prio是分配给任务的优先级
功能描述 建立任务
函数原型 INT8U OSTaskCreate (void        (*task)(void *pd), 
                                        void        *pdata, 
                                       OS_STK *ptos, 
                                       INT8U      prio)

{

     OS_ENTER_CRITICAL(); //进入临界期0

     if (OSTCBPrioTbl[prio] == (OS_TCB *) 0) //判断该优先级是否已经存在

     {

         OSTCBPrioTbl[prio] = (OS_TCB *) 1;  //保留该优先级

         OS_EXIT_CRITICAL(); //退出临界区0

        

         psp = (OS_STK *) OSTaskStkInit(task, ppdata, ptos, 0);   //初始化任务堆栈

         err = OS_TCBInit(prio, psp, (OS_STK *) 0, 0, 0, (void *) 0, 0); //初始化任务控制块TCB

         if (err == OS_NO_ERR) //初始化TCB没有出错

         {

              OS_ENTER_CRITICAL();   //进入临界区1

              OSTaskCtr++;       //任务数自加

              OS_EXIT_CRITICAL();    //退出临界区1

              if (OSRunning == TRUE) //如果系统已经运行(即在OS运行时创建任务)

              {

                   OS_Sched();   //任务调度(该函数不再返回)

              }

         }

         else //初始化TCB出错

         {

              OS_ENTER_CRITICAL(); //进入临界区2

              OSTCBPrioTbl[prio] = (OS_TCB *) 0; //初始化TCB出错了, 释放TCB

              OS_EXIT_CRITICAL();  //退出临界区2

         }

        

         return (err); //返回初始化TCB出错信息

     }

     OS_EXIT_CRITICAL();//退出临界区0

 

     return (OS_PRIO_EXIST); //返回错误信息,该优先级已经存在

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值