任务的创建、挂起和恢复

来源:互联网 发布:office2016 mac 10.9 编辑:程序博客网 时间:2024/05/29 06:31

ucosii有两个创建任务的函数:OSTaskCreate()和OSTaskCreateExt().其中OSTaskCreateExt()是OSTaskCreate()的扩展。并提供了一些附加功能。

INT8U   OSTaskCreate(                     void     (*task)(void *pd),//指向任务的指针                     void     *pdata,//传递给任务的参数                     OS_STK   *ptos,//指向任务堆栈栈顶的指针                     INT8U     prio//任务的优先级                    )

一般来说,任务可在调用函数OSStart()启动任务调动之前来创建,也可以在任务中来创建。但ucos有一个规定,在调用启动任务函数OSStart()之前先创建一个任务,并赋予它最高的任务优先级,从而使他成为起始任务,然后在起始任务中再创建其他任务。
如果要使用系统提供的统计任务,则统计任务初始化函数也必须在这个起始任务中来调用。

挂起任务函数OSTaskSuspend(INT8U prio);

函数的参数prio为待挂起任务的优先级别。如果调用函数OSTaskSuspend()的任务要挂起自身,则参数必须为常数OS_PRIO_SELF(该常数在文件uCOS_II.H中被定义为0xFF)。

当调用成功时,返回信息OS_NO_ERR;否则根据出错的具体情况返回OS_TASK_SUSPEND_IDLE、OSPRIO_INVALID和OS_TASK_SUSPEND_PRIO等。

任务可以通过调用函数OSTaskChangePrio()来改变任务的优先级。
函数OSTaskChangePrio()的原型如下:
INT8U OSTaskChangePrio(
INT8U oldprio;
INT8U newprio;
);

若调用函数OSTaskChangePrio()成功,则函数返回OS_NO_ERR。

任务的删除:
OSTaskDel()的原型如下:

#if OS_TASK_DEL_ENINT8U   OSTaskDel(                    INT8U    prio//要删除任务的优先级);

如果一个任务调用函数是为了删除自己,则应在调用函数时另函数的参数prio为OS_PRIO_SELF。

请求删除任务函数:
OSTaskDelReq()
{
INT8U prio;//待删除任务的优先级别
}

函数的参数应该为被删除任务的优先级别prio,被删除任务调用这个函数时,函数参数应该为OS_PRIO_SELF。