典型的,每个任务都是一个无限的循环。每个任务都处在以下5种状态之一的状态下,这5种状态是休眠态、就绪态、运行态、挂起态(等待某一事件发生)和被中断态。在任一时刻,任务的状态一定是这5种状态之一(如图1所示)。

图1 任务的状态
休眠态(DORMANT)指任务驻留在程序空间之中,还没有交给μC/OS-Ⅱ管理。把任务交给μC/OS-Ⅱ是通过调用下述两个函数:OSTaskCreate()或OSTaskCreateExt()。当任务一旦建立,这个任务就进入就绪态准备运行。任务的建立可以是在多任务运行开始之前,也可以动态的被一个运行着的任务建立。如果一个任务是被另一个任务建立的,而这个任务的优先级高于建立它的那个任务,则这个刚刚建立的任务将立即得到CPU的控制权。一个任务可以通过调用OSTaskDel()返回休眠态,或通过调用该函数让另一个任务进入休眠态。
调用OSStart()可以启动多任务。OSStart()函数运行进入就绪态的优先级最高的任务。只有当所有优先级高于它的任务转为等待状态,或者是被删除了,就绪的任务才能进入运行态。
正在运行的任务可以通过调用两个函数将自身延迟一段时间,这两个函数是OSTimeDly()或OSTimeDlyHMSM()。这个任务于是进入等待状态,等待这段时间过去,下一个优先级最高的、并进入了就绪态的任务立刻被赋予了CPU的控制权。等待的时间过去以后,系统服务函数OSTimeTick()使延迟了的任务进入就绪态。
正在运行的任务期待某一事件的发生也要等待,手段是调用以下3个函数之一:OSSemPend()、OSMboxPend()或OSQPend()。调用后任务进入了等待状态(WAITING)。当任务因等待事件被挂起(PEND),下一个优先级最高的任务立即得到了CPU的控制权。当事件发生了,被挂起的任务进入就绪态。事件发生的报告可能来自另一个任务,也可能来自中断服务子程序。
正在运行的任务是可以被中断的,除非该任务关中断,或者μC/OS-Ⅱ关中断。被中断了的任务就进入了中断服务子程序(ISR)。响应中断时,正在执行的任务被挂起,中断服务子程序控制了CPU的使用权。中断服务子程序可能会报告一个或多个事件的发生,而使一个或多个任务进入就绪态。在这种情况下,从中断服务子程序返回之前,μC/OS-Ⅱ要判定,被中断的任务是否还是就绪态任务中优先级最高的任务。如果中断服务子程序使一个优先级更高的任务进入了就绪态,则新进入就绪态的这个优先级更高的任务将得以运行,否则原来被中断了的任务还会继续运行。
当所有的任务都处在等待事件发生或等待延迟时间结束的状态时,μC/OS-Ⅱ执行空闲任务(idle task),执行OSTaskIdle()函数。