首页 > 创投 > 内容页

FreeRTOS与UCOSIII的任务状态

2023-08-24 22:40:14 来源:哔哩哔哩

UCOSIII的任务状态

运行态(与FreeRTOS相同):正在运行的任务、正在使用处理器(CPU)的任务,单核处理器中任务时候只有一个任务(线程)处于运行态

就绪态(与FreeRTOS相同):已经准备就绪的任务(非阻塞或挂起),可以立刻运行但是还没有运行的任务就处于就绪态


(资料图)

处于就绪态的任务等待的是CPU的调度,等待获取CPU的使用权

等待态(类比FreeRTOS阻塞态)

正在运行的任务需要等待某一外部事件,暂时让出CPU使用权,进入等待事件状态。

正在等待信号量、消息、事件标志组等的任务

休眠态(不同于FreeRTOS)

可以理解为任务函数存在,但是该任务还没有被创建的状态,被删除的任务也处于休眠态。休眠态只是以任务函数的方式存在,只是存储区的一段代码。并未使用OSTaskCreate()函数创建任务,不受UCOSIII任务调度器管理。

中断服务态(不同于FreeRTOS)

一个正在执行的任务被中断打断,CPU去执行中断服务程序,被打断任务进入中断服务态。

FreeRTOS的任务状态

运行态:正在运行的任务、正在使用处理器(CPU)的任务,单核处理器中任务时候只有一个任务(线程)处于运行态

就绪态:已经准备就绪的任务(非阻塞或挂起),可以立刻运行但是还没有运行的任务就处于就绪态

处于就绪态的任务等待的是CPU的调度,等待获取CPU的使用权

阻塞态:正在等待某个外部事件的任务处于阻塞态

使用vTaskDelay()后,就会进入阻塞态,直到延时结束

正在等待队列、信号量、事件组、任务通知或互斥量的任务,也会进入阻塞态。

阻塞态下的任务不进入调度器,等待事件到来后在退出阻塞态。进入阻塞态会有一个超时时间,等待事件的超时时间到了,会退出阻塞态,超时时间可以是无线(一直阻塞,直到事件带来)

挂起态:任务被暂时停止进入的状态,挂起态任务也不进入任务调度器,挂起态任务没有超时事件。

进入挂起态:vTaskSuspend();

退出挂起态:xTaskResume();

关键词: