uC/OS – II中的任务_读书笔记_3

来源:互联网 发布:淘宝返利机器人骗局 编辑:程序博客网 时间:2024/06/06 20:19

任务的创建、任务的挂起和恢复、任务优先级别的修改、任务的删除、查询任务的信息、uC/OS – II的初始化和任务的启动


2.5任务的创建

2.5.1用函数OSTaskCreate()创建任务

(1)先对创建任务的优先级进行一系列的判断

(2)确认该优先级别合法且未被使用后,随即调用函数OSTaskSktInit()和函数OSTCBInit()对任务堆栈和任务控制块进行初始化。

(3)初始化成功后,除了把任务计数器加1外,还要进一步判断uC/OS的核是否在运行状态(即ISRunning的值是否为1)。如果OSRunning的值为1,则调用OSSched()进行任务调度。

(4)OSTaskCreate()创建任务成功后,将返回OS_NO_ERR;否则,返回0S_PRIO_INVALID,OS_PRIO_EXTST及在函数内调用函数失败时返回的信息。

 

2.5.2用函数OSTaskCreateExt()创建任务

用该函数创建任务更为灵活,但也会增加一些额外的开销。

 

2.5.3创建任务的一般方法

(1)调用函数0SStart()启动任务调度之前来创建任务,也可在任务中创建。

(2)但是要在启动任务函数OSStart()之前先创建一个任务,并赋予它最高的优先级,然后在这个起始任务中,在创建其他各项任务。

示意性代码:

/*********************主函数***********************/

voidmain()

{

……

OSInit();                     //对uC/OS-II进行初始化

……

OSTaskCreate(TaskStart,……);

OSStart();

}

 

/**********************起始任务***********************/

voidTaskStart(void *pdata)

{

……

OSStatInit();            //初始化统计任务

……

while(1)

{

    起始任务TaskStart()的代码段;

}

}

(3)uC/OS不允许在中断服务程序中创建任务。

 

2.6任务的挂起和恢复 

2.6.1挂起任务

(1)挂起任务函数OSTaskSuspend()原型如下:

INT8UOSTaskSuspend(INT8U prio);

(2)函数的参数prio为待挂起任务的优先级别,如果任务要挂起自身,则参数必须为常数OS_PRIO_SELF(0xFF)。

(3)挂起任务本身,删除任务在就绪表中的就绪标志,并在任务控制块成员OSTCBStat中做挂起记录,然后引发一次任务调度,使CPU去运行就绪的其他任务。

   挂起其他任务,删除任务在就绪表中的就绪标志,并在任务控制块成员OSTCBStat中做挂起记录。

函数OSTaskSuspend()流程图

 

2.6.2恢复任务

INT8UOSTaskResume()的原型如下:

INT8UOSTaskResume(INT8U prio);

函数0STaskResume()的流程图

 

2.7其他任务管理函数

2.7.1任务优先级别的修改

调用函数

0STaskChangePrio()

{

INT8Uoldprio;    //任务现在的优先级别

INT8Unewprio;    //要修改的优先级别

}

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

 

2.7.2任务的删除

(1)所谓删除一个任务,把任务置于睡眠状态。

(2)调用OSTaskDel()删除任务自身或除了空闲任务之外的其他任务。

(3)函数原型:

#ifOS_TASK_DEL_EN

INT8UOSTaskDelReq

(

    INT8U prio        //要删除任务和优先级别

);

 

2.7.3查询任务的信息

了解应用程序运行需要了解一个任务的指针堆栈等信息,通过调用OSTaskQuery

函数原型:OSTaskQuery(

INT8U prio,

OS_TCB *pdata

);

查询成功将得到的任务信息放在结构OS_TCB变量中。

 

2.8uC/OS – II的初始化和任务的启动

2.8.1Uc/OS – II 的初始化

(1)初始化函数OSInit()

(2)初始化之后各全局变量的情况:

2.8.2Uc/OS – II 的启动

(1)启动函数:OSStart();

(2)启动之后各个全局变量的值

 

0 0
原创粉丝点击