任务状态
FreeRTOS 中的任务永远处于下面几个状态中的某一个:
● 运行态
当一个任务正在运行时,那么就说这个任务处于运行态,处于运行态的任务就是当前正在使用处理器的任务。如果使用的是单核处理器的话那么不管在任何时刻永远都只有一个任务处于运行态。
● 就绪态
处于就绪态的任务是那些已经准备就绪(这些任务没有被阻塞或者挂起),可以运行的任务,但是处于就绪态的任务还没有运行,因为有一个同优先级或者更高优先级的任务正在运行!
● 阻塞态
如果一个任务当前正在等待某个外部事件的话就说它处于阻塞态,比如说如果某个任务调用了函数
vTaskDelay()的话就会进入阻塞态,直到延时周期完成。任务在等待队列、信号量、事件组、通知或互斥信号量的时候也会进入阻塞态。任务进入阻塞态会有一个超时时间,当超过这个超时时间任务就会退出阻塞态,即使所等待的事件还没有来临!
● 挂起态
像阻塞态一样,任务进入挂起态以后也不能被调度器调用进入运行态,但是进入挂起态的任务没有超时时间。任务进入和退出挂起态通过调用函数vTaskSuspend()和 xTaskResume()。任务状态之间的转换如图所示:
4、任务优先级
每 个 任 务 都 可 以 分 配 一 个 从 0~(configMAX_PRIORITIES-1) 的 优 先 级
,configMAX_PRIORITIES 在文件 FreeRTOSConfig.h 中有定义,一般不超过 32。
优先级数字越低表示任务的优先级越低,0 的优先级最低,configMAX_PRIORITIES-1 的优先级最高。空闲任务的优先级最低,为0。(注意和中断的优先级区分,任务和中断不一样,中断一般是数字越小优先级越大)
当宏 configUSE_TIME_SLICING 定义为 1 的时候多个任务可以共用一个优先级,数量不限。
-
嵌入式
+关注
关注
5087文章
19148浏览量
306194 -
函数
+关注
关注
3文章
4338浏览量
62769 -
FreeRTOS
+关注
关注
12文章
484浏览量
62230 -
任务
+关注
关注
1文章
20浏览量
8552
发布评论请先 登录
相关推荐
评论