任务的创建、挂起和恢复

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_EN
INT8U   OSTaskDel(
                    INT8U    prio//要删除任务的优先级
);

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

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

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

实验报告三:(1)设计 Task0、Task1 两个任务任务 Task0 不断地挂起自己,再被任务 Task1 解挂,两个任务不断地切换执行,并输出两个任务在各个时刻的状态。Task0 的主要功能是显示 Task1 的状态,Task1 的主要功能是显示 Task0 的状态。整个应用的运行流程如图 1 所示,其描述如下:在 main 函数创建起始任务 TaskStart,其优先级为 0。TaskStart 任务主要完成创建 2 个应用任务 Task0、Task1,并挂起自己(不再被其它任务唤醒)。之后整个系统的运行流程如下:t1 时刻,Task0 开始执行,它运行到 t2 时刻挂起自己;t2 时刻,系统调度处于就绪状态的优先级最高任务 Task1 执行,它在 t3 时刻唤醒 Task0,后者由于优先级较高而抢占 CPU;Task0 执行到 t4 时刻又挂起自己,内核调度 Task1执行;Task1 运行至 t5 时刻再度唤醒 Task0; 注意:图中的栅格并不代表严格的时间刻度,而仅仅表现各任务启动执行的相对先后关系。 (2)设计 MyTask、YouTask、KeyTask 三个任务:MyTask 任务输出 M;YouTask 任务输出 Y,并输出 MyTask 任务的状态;KeyTask 任务从键盘接收字符 Y 或 N,当接收 Y 时挂起 MyTask 任务,当接收 N 时恢复 MyTask 任务。 (3)设计 KeyTask 任务,当从键盘输入+号时动态创建任务,最多可以创建 10 个任务,这 10个任务都执行一个函数 MyTask,要求优先级是(PRIO_BASE+0,1,2,3,4,5,6,7,8,9),还要向不同的任务传递不同的参数(0,1,2,3,4,5,6,7,8,9)给 MyTask 函数,优先级为(PRIO_BASE+0,1,2,3,4,5,6,7,8,9)的任务分别输出数字(0,1,2,3,4,5,6,7,8,9)。当从键盘输入-号时动态的删除刚创建一个任务,最多可删除 10 个任务。提示:多个任务可以执行一个函数。运行结果如下图所示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值