UCOS学习笔记(三)任务的创建、删除、挂起、恢复

        今天学习了UCOSIII下任务的创建、删除、挂起、恢复,其实都是几个简单的API函数,但还是做一下记录吧。

        任务的创建

        OSTaskCreate()函数,它的参数有十三个之多,函数的原型如下:    

void  OSTaskCreate (OS_TCB        *p_tcb,       //任务控制块
                    CPU_CHAR      *p_name,      //任务名字
                    OS_TASK_PTR    p_task,      //任务函数
                    void          *p_arg,       //传递给任务函数的参数
                    OS_PRIO        prio,        //优先级
                    CPU_STK       *p_stk_base,  //任务堆栈基地址
                    CPU_STK_SIZE   stk_limit,   //堆栈深度限位
                    CPU_STK_SIZE   stk_size,    //堆栈大小
                    OS_MSG_QTY     q_size,      //内建消息队列的长度
                    OS_TICK        time_quanta, //时间片的长度(单位时钟节拍数)
                    void          *p_ext,       //指针(指向用户的存储区)
                    OS_OPT         opt,         //选项(可以有多个)
                    OS_ERR        *p_err)       //错误码

      任务创建的流程:

      1、设置任务优先级、任务堆栈大小,定义任务堆栈、任务控制块,声明任务函数。
      2、main函数中,最先定义一个错误码,然后CPU_SR_ALLOC(); 宏定义CPU_SR,然后是时钟设定,中断分组,底层驱动初始化,接着初始化OS,进入临界区,然后创建开始任务,完成后退出临界区,开启OS,进入死循环。
      3、编写开始任务,初始化及一些条件编译完成后,进入临界区在开始任务中创建别的任务,最后要挂起开始任务,然后退出临界区。
      4、编写其他任务的任务函数,初始化要在临界区中完成。

        错误码:

    OS_ERR_NONE                    创建成功
    OS_ERR_ILLEGAL_CREATE_RUN_TIME 试图创建一个任务在调用OSSafetyCriticalStart()后
    OS_ERR_NAME                    p_name是一个空指针
    OS_ERR_PRIO_INVALID            优先级有问题,注意五个不能使用的优先级
    OS_ERR_STK_INVALID             p_stk_base是一个空指针
    OS_ERR_STK_SIZE_INVALID        堆栈深度限位为零
    OS_ERR_TASK_CREATE_ISR         在中断中调用该函数
    OS_ERR_TASK_INVALID            p_task是一个空指针
    OS_ERR_TCB_INVALID             p_tcb是一个空指针

     任务的删除

     OSTaskDel()函数,有俩个参数,函数的原型如下:

void  OSTaskDel (OS_TCB  *p_tcb,                      //任务控制块
                 OS_ERR  *p_err)                      //错误码

    删除某个任务后,它占用的TCB和堆栈可以再次利用来创建其他任务
    要尽量避免在系统运行中删除任务

    错误码:

    OS_ERR_NONE                  删除成功
    OS_ERR_STATE_INVALID         任务的状态无效
    OS_ERR_TASK_DEL_IDLE         试图删除空闲任务
    OS_ERR_TASK_DEL_INVALID      试图删除中断服务任务
    OS_ERR_TASK_DEL_ISR          在中断中调用该函数

    任务的挂起

    OSTaskSuspend()函数,有俩个参数,函数的原型如下:

void   OSTaskSuspend (OS_TCB  *p_tcb,                    //任务控制块
                      OS_ERR  *p_err)                    //错误码

    用于想暂停某个函数,但又不想把它删掉时将它挂起进入等待态。

    错误码:

     OS_ERR_NONE                      该任务已经挂起(成功)
     OS_ERR_SCHED_LOCKED              任务被锁定
     OS_ERR_TASK_SUSPEND_ISR          在中断中调用该函数
     OS_ERR_TASK_SUSPEND_IDLE         挂起空闲任务
     OS_ERR_TASK_SUSPEND_INT_HANDLER  挂起中断服务函数

    任务的恢复

     OSTaskResume()函数,有俩个参数,函数的原型如下:

void  OSTaskResume (OS_TCB  *p_tcb,                        //任务控制块
                    OS_ERR  *p_err)                        //错误码

    恢复某个被挂起的任务

    错误码:

     OS_ERR_NONE                  该任务已被恢复(成功)
     OS_ERR_STATE_INVALID         任务处于无效状态
     OS_ERR_TASK_RESUME_ISR       在中断中调用
     OS_ERR_TASK_RESUME_SELF      恢复自己
     OS_ERR_TASK_NOT_SUSPENDED    要恢复的任务尚未挂起

猜你喜欢

转载自blog.csdn.net/a568713197/article/details/81273532