其他分享
首页 > 其他分享> > 《嵌入式实时操作系统uC/OS-II》第四章任务管理

《嵌入式实时操作系统uC/OS-II》第四章任务管理

作者:互联网

1.注意事项:

         任务可以是一个无限的循环,也可以在一次执行完毕后被删除掉。

         任务看起来与任何C函数一样,具有一个返回类型值和一个参数,只是它决不返回。

         任务的返回类型必须定义成void型。

         uC/OS-II可以管理多达64个任务,但建议保留4个最高优先级和4个最低优先级的任务,供以后uC/OS-II的版本使用。然而目前uC/OS-II实际上只是用了2个优先级别:OS_LOWEST_PRIO和OS_LOWEST_RRIO-1(参看文件OS-CFG.H)。

         2.常用函数

         (1)OSTaskCreat(),建立任务

         任务可以在多任务调度开始前建立,也可以在其他任务的执行过程中建立。在开始多任务调度(调用OSStart()前)前,必须建立至少一个任务。任务不能由中断服务程序(ISR)建立。

         4个参数:task是指向任务代码的指针;pdata是任务开始执行时,传递给任务的参数的指针,ptos是分配给任务的堆栈的栈顶指针;prio是分配给任务的优先级。

         (2)OSTaskCreatExt(),建立任务

         除OSTaskCreat()中的4个参数外,还有5个参数。

         id是为要建立的任务创建的一个特殊的标志符;pbos是指向任务堆栈栈底的指针,用于堆栈的检验;stk_size用于执行堆栈的容量,同样用于堆栈的检验;pext是指向用户附加的数据域的指针,用来扩展任务的任务控制块OS_TCB;opt是用于设定选项,制定会否允许堆栈检验,是否将堆栈清0,任务是否需要浮点操作等等。

         检验堆栈要求在任务建立时,堆栈中存储的值都是0。

         (3)OSTaskStkChk(),堆栈检验

         堆栈必须声明为OS_TSK类型,并且由连续的内存空间组成。可以静态分配堆栈空间(在编译时分配),也可以动态分配堆栈空间(在运行时分配)。

         要使用堆栈检验功能,需要:

  1. 在OS_CFG.H文件中置OS_TASK_CREATE_EXT_EN为1;
  2. 用OSTaskCreateExt()建立任务,并赋予该任务比实际需要多一些的栈空间;
  3. 在OSTaskCreateExt()中,将参数opt设置为OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR;
  4. 把需要进行堆栈检验的任务的优先级作为OSTTaskStkChk()的参数并调用。可以检验任何任务的堆栈,而不是只能检验正在运行的任务。

(4)OSTaskDel(),删除任务

删除任务,是说任务将返回并处于休眠状态。OSTaskDel()赢确保不是在中断服务子程序ISR中试图删除一个任务以及要删除的任务不是空闲任务,这是不允许的。

(5)OSTaskDelReq(),请求删除任务

(6)OSTaskChangePrio(),改变任务的优先级

不能改变空闲任务的优先级,但可以改变调用本函数的任务或者其它任务的优先级。需要检验新优先级是否空闲。

(7)OSTaskSuspend(),挂起任务

挂起的任务只能通过调用OSTaskResume()函数来回复。任务可以挂起自己或者其它任务,但不能挂起空闲任务。

(8)OSTaskResume(),恢复任务

(9)OSTaskQuery(),获得任务的信息

   应用程序可以通过调用此函数获得自身或其它应用任务的信息。实际上该函数获得的是指定任务的任务控制块OS_TCB内容的拷贝。

标签:优先级,检验,II,任务,实时操作系统,参数,堆栈,OS,uC
来源: https://blog.csdn.net/lvturancao/article/details/104747553