UCOSIII的任务状态
运行态(与FreeRTOS相同):正在运行的任务、正在使用处理器(CPU)的任务,单核处理器中任务时候只有一个任务(线程)处于运行态
就绪态(与FreeRTOS相同):已经准备就绪的任务(非阻塞或挂起),可以立刻运行但是还没有运行的任务就处于就绪态
(资料图)
处于就绪态的任务等待的是CPU的调度,等待获取CPU的使用权
等待态(类比FreeRTOS阻塞态)
正在运行的任务需要等待某一外部事件,暂时让出CPU使用权,进入等待事件状态。
正在等待信号量、消息、事件标志组等的任务
休眠态(不同于FreeRTOS)
可以理解为任务函数存在,但是该任务还没有被创建的状态,被删除的任务也处于休眠态。休眠态只是以任务函数的方式存在,只是存储区的一段代码。并未使用OSTaskCreate()函数创建任务,不受UCOSIII任务调度器管理。
中断服务态(不同于FreeRTOS)
一个正在执行的任务被中断打断,CPU去执行中断服务程序,被打断任务进入中断服务态。
FreeRTOS的任务状态
运行态:正在运行的任务、正在使用处理器(CPU)的任务,单核处理器中任务时候只有一个任务(线程)处于运行态
就绪态:已经准备就绪的任务(非阻塞或挂起),可以立刻运行但是还没有运行的任务就处于就绪态
处于就绪态的任务等待的是CPU的调度,等待获取CPU的使用权
阻塞态:正在等待某个外部事件的任务处于阻塞态
使用vTaskDelay()后,就会进入阻塞态,直到延时结束
正在等待队列、信号量、事件组、任务通知或互斥量的任务,也会进入阻塞态。
阻塞态下的任务不进入调度器,等待事件到来后在退出阻塞态。进入阻塞态会有一个超时时间,等待事件的超时时间到了,会退出阻塞态,超时时间可以是无线(一直阻塞,直到事件带来)
挂起态:任务被暂时停止进入的状态,挂起态任务也不进入任务调度器,挂起态任务没有超时事件。
进入挂起态:vTaskSuspend();
退出挂起态:xTaskResume();