睡眠态(DORMANT)——指任务驻留在程序空间,还没有交给µC/OS-II来管理。把任务交给µC/OS-II,是通过调用下述2个函数之一:OSTaskCreate()或OSTaskCreateExt()来实现的。这些调用只是用于告诉µC/OS-II,任务的起始地址在哪里;任务建立时,用户给任务赋予的优先级是多少;任务要使用多少栈空间等。
就绪态(READY)——任务一旦建立,这个任务就进入了就绪态,准备运行。任务的建立可以是在多任务运行开始之前,也可以动态地由一个运行着地任务建立。如果多任务已经启动,且一个任务是被另一个任务建立的,而新建立的任务优先级高于建立它的任务的优先级,则这个刚刚建立的任务将立即得到CPU的使用权。一个任务可以通过调用OSTaskDel()返回到睡眠态,或通过调用该函数让另一个任务进入睡眠态。
运行态(RUNNING)——调用OSStart()可以启动多任务。OSStart()函数只能在启动时调用一次,该函数运行用户初始化代码中已经建立的、进入就绪态的优先级最高的任务。优先级最高的任务就这样进入了运行态。任何时刻只能有一个任务处于运行态。就绪的任务只有当所有优先级高于这个任务的任务都转为等待状态,或者是被删除了,才能进入运行态。
等待状态(WAITING)——正在运行的任务可以通过调用以下2个函数之一:OSTimeDly()或OSTimeDlyHMSM(),将自身延迟一段时间。这个任务于是进入等待状态,一直到函数中定义的延迟时间到。这2个函数会立即强制执行任务切换,让下一个优先级最高的、并进入了就绪态的任务运行。等待的时间过去以后,系统服务函数OSTimeTick()使延迟了的任务进入就绪态。而正在运行的任务可能需要等待某一事件的发生,可以通过调用以下函数之一实现:OSFlagPend()、OSSemPend()、OSMutexPend()、OSMboxPend()或OSQPend()。如果该事件并未发生,调用上述函数的任务就进入了等待状态,直到等待的事件发生了。当任务因等待事件而被挂起时,下一个优先级最高的任务立即得到了CPU的使用权。当事件发生了或等待超时使,被挂起的任务就进入就绪态。事件发生的报告可能来自另一个任务,也可能来自中断服务子程序。
中断服务态(ISR)——正在运行的任务是可以被中断的,除非该任务将中断关闭,或者µC/OS-II将中断关闭。被中断了的任务于是进入了中断服务态。相应中断时,正在执行的任务被挂起,中断服务子程序得到了CPU的使用权。中断服务子程序可能会报告一个或多个事件的发生,而使一个或多个任务进入就绪态。在这种情况下,从中断服务子程序返回之前,µC/OS-II要判定被中断的任务是否还是就绪态任务中优先级最高的。如果中断服务子程序使另一个优先级更高的任务进入就绪态,则新进入就绪态的这个优先级更高的任务将得以运行;否则,原来被众多拉的任务将继续运行。
当所有的任务都在等待事件的发生或等待延迟时间的结束时,µC/OS-II执行被称为空闲任务(idle task)的内部任务,即OSTaskIdle()。