【深入实践ucos-ii】任务管理函数

创建任务

ucos-ii使用OSTaskCreate()和OSTaskCreateExt()来创建新任务。
OSTaskCreate()函数声明如下:

INT8U   OSTaskCreate(void(*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT8U prio);

参数说明:

参数及类型解释
void(*task)(void *p_arg)task是一个指向函数的指针,即任务执行函数代码。
void *p_arg传递给task指向函数的参数。
OS_STK *ptos任务栈顶指针。
INT8U prio任务优先级。

OSTaskCreate()函数声明如下:

INT8U         OSTaskCreateExt         (void           (*task)(void *p_arg),
                                       void            *p_arg,
                                       OS_STK          *ptos,
                                       INT8U            prio,
                                       INT16U           id,
                                       OS_STK          *pbos,
                                       INT32U           stk_size,
                                       void            *pext,
                                       INT16U           opt);

参数说明:

参数及类型解释
void (*task)(void *p_arg)指向任务代码的指针
void *p_arg任务函数参数
OS_STK *ptos指向被分配给该任务的栈顶指针
INT8U prio任务优先级
INT16U id任务ID值
OS_STK *pbos任务栈底指针
INT32U stk_size任务栈的单元大小
void *pext任务控制块扩展部分数据的位置
INT16U opt任务栈空间初始化选项

删除任务

ucos-ii允许某个任务删除另一个任务,也可删除自己。被删除后,该任务将进入休眠。
OSTaskDel()函数声明如下:

INT8U   OSTaskDel(INT8U *prio)

参数说明:

参数及类型解释
INT8U *prio将被删除任务的优先级。

请求删除任务

OSTaskDelReq()函数并不是直接执行删除操作,而是示意该任务在后续执行时释放申请的资源,然后删除自己。其声明如下:

INT8U   OSTaskDelReq(INT8U prio)

参数说明:

参数及类型解释
INT8U *prio将被删除任务的优先级。

示例代码:

void Task(void *p_arg)
{
    while(1)
    {
        OSTimeDly(1);
        if(OSTaskDelReq(OS_PRIO_SELF) == OS_TASK_DEL_REQ) //检测是否为删除标识
        {
            //释放资源
            ...
            OSTaskDel(OS_PRIO_SELF);
        }

        ...  //任务代码

    }
}

挂起任务

OSTaskSuspend函数用来挂起一个指定优先级的任务。此函数是调用它的任务暂停执行,直到其他任务调用OSTaskResume()函数才恢复其就绪状态。其声明如下:

INT8U   OSTaskSuspend(INT8U prio)

参数说明:

参数及类型解释
INT8U *prioprio用来以优先级值指定任务,如果欲挂起自己,则可设置优先级为OS_PRIO_SELF。

恢复任务

OSTaskResume()函数用来恢复一个被函数OSTaskSuspend()挂起的任务,使其处于就绪状态。其声明如下:

OSTaskResume(INT8U prio)

参数说明:

参数及类型解释
INT8U *prio欲恢复任务的优先级。

设置任务名称

OSTaskNameSet()函数用来设置任务的名称。声明如下:

void    OSTaskNameSet(INT8U prio, INT8U *pname, INT8U *err)

参数说明:

参数及类型解释
INT8U *prio欲修改名字任务的优先级,标识该任务。
INT8U *pname指向欲设置的任务的名称字符串。
INT8U *err存储返回值。

获取任务名称

OSTaskNameGet()函数用来获取任务名称,声明如下:

void    OSTaskNameGet(INT8U prio, INT8U *pname, INT8U *err)

参数说明:

参数及类型解释
INT8U *prio欲获取名字任务的优先级,标识该任务。
INT8U *pname任务名称字符串存储位置。
INT8U *err存储返回值。

读取任务TCB信息

OSTaskQuery()函数用来在任务TCB中查询任务当前TCB信息。声明如下:

INT8U   OSTsakQuery(INT8U prio, OS_TCB *p_task_data)

参数说明:

参数及类型解释
INT8U prio使用优先级来标识欲读取信息的任务。
OS_TCB *p_task_data存储任务TCB信息的临时空间。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值