码迷,mamicode.com
首页 > 其他好文 > 详细

任务管理(uC/OS-II)

时间:2014-12-06 15:16:27      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   for   

任务可以是一个无限的循环,也可以在一次执行完毕后被删除掉。任务的返回类型必须定义成void,只是它决不返回。任务必须是以下两种结构之一:

void YourTask(void *pdata)
{
    for (;;)
    {
        /*用户代码*/
    }
}

void YourTask(void *pdata)
{
    /*用户代码*/
    OSTaskDel(OS_PRIO_SELF);
}

一、建立任务

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

注意:

(1)OSTaskCreate()或OSTaskCreateExt()须确保定义的优先级没有被其他任务占用。在uC/OS-II中,每个任务的优先级必须各不相同。

(2)如果OSTaskCreate()函数是在某个任务的执行过程中被调用的(OSRunning == TRUE),则任务调度函数会被调用,以判断新建立的任务是否比原来的任务有更高的优先级。如果新任务的优先级更高,内核会进行一次从旧任务到新任务的任务切换。如果该任务是在多任务调度开始之前建立的,则任务调度函数不会起作用。

(3)OSTaskCtr用于跟踪已建立的任务数目。

 

二、任务堆栈

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

typedef INT32U         OS_STK;

注意:在动态分配中,要时刻注意内存碎片问题。特别是当反复建立和删除任务时,内存堆中可能会出现大量的内存碎片,导致没有足够大的一块连续内存区域可用做任务堆栈。

 

当OS_STK_GROWTH == 1时,堆栈是从上往下递减的,需将堆栈的最高内存地址传递给任务创建函数。

bubuko.com,布布扣

当OS_STK_GROWTH == 0时,堆栈是从下往上递增的,需将堆栈的最低内存地址传递给任务创建函数。

bubuko.com,布布扣

 

三、删除任务

删除任务,是说任务将返回并处于休眠状态,并不是说任务的代码被删除了,只是任务的代码不再被uC/OS-II调用。

任务管理(uC/OS-II)

标签:style   blog   http   io   ar   color   os   sp   for   

原文地址:http://www.cnblogs.com/mengwang024/p/4148184.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!