FreeRTOS任务状态
1、运行态
正在运行的任务,正在使用处理器的任务。
单核处理器中任何时候都有且只有一个任务处于运行态。
2、就绪态
已经准备就绪(非阻塞或挂起),可以立即运行但还没有运行的任务。
正在等待比自己高优先级任务结束后运行的任务。
3、阻塞态
正在等待某个外部事件的任务。
阻塞态下不进入任务调度器,等待事件到来后再退出阻塞态。
使用了vTaskDelay()后,就会进入阻塞态直到延时结束。
正在等待队列、信号量、事件组、通知或互斥信号量的任务,也会进入阻塞态。
进入阻塞态会有一个超时时间,等待事件超时了未到,会退出阻塞态。
4、挂起态
挂起态任务也不进入任务调度器。
挂起态任务没有超时事件。
进入挂起态:vTaskSuspend();
退出挂起态:xTaskResume();
UCOSIII任务状态
1、运行态(与FreeRTOS相同)
正在运行的任务,正在使用处理器的任务。
单核处理器中任何时候都有且只有一个任务处于运行态。
UCOSIII不支持多核CPU。
2、就绪态(与FreeRTOS相同)
已经准备就绪(非阻塞或挂起),可以立即运行但还没有运行的任务。
正在等待比自己高优先级任务结束后运行的任务。
3、等待态(类比FreeRTOS阻塞态)
正在运行的任务需要等待某一外部事件,暂时让出CPU使用权,进入等待事件状态。
正在等待信号量、消息、事件标志组等的任务
4、休眠态(不同于FreeRTOS)
休眠态只是以任务函数的方式存在,只是存储区的一段代码。
并未使用OSTaskCreate()函数创建任务,不受UCOSIII任务调度器管理。
5、中断服务态(不同于FreeRTOS)
一个正在执行的任务被中断打断,CPU去执行中断服务程序,被打断任务进入中断服务态。