freertos任务状态切换

这篇博客介绍了实时操作系统(RTOS)中任务的四种基本状态:运行态、就绪态、阻塞态和挂起态。在运行态,只有一个任务在执行;就绪态的任务可执行但等待更高优先级任务;阻塞态任务在等待事件,不占用处理器资源;挂起态任务不能被调度,需通过API函数恢复。调度器仅调度就绪态任务。
摘要由CSDN通过智能技术生成

1、运行态(Running)

当一个任务实际执行时,它就处于运行态。如果RTOS运行的处理器只有一个内核,那么在任何给定的时间内只能有一个任务处于运行态。

2、就绪态(Ready)

就绪任务是指能够执行,但是还没有执行的任务(不是阻塞态或挂起态),因为有一个优先级相同或更高的任务正在运行。

3、阻塞态(blocked)

A task that is waiting for an event is said to be in the ‘Blocked’ state, which is a sub-state of the Not Running state.

如果任务正在等待一个临时或外部事件,则任务处于阻塞态。等待的事件一般有以下几种情况:

  • 等待时间事件:任务调用vTaskDelay()函数后,任务进入阻塞态,直到延时周期结束(Note that the vTaskDelay() API function is available only when INCLUDE_vTaskDelay is set to 1 in FreeRTOSConfig.h.)
  • 等待同步事件:事件源自另一个任务或中断。例如:任务可以阻塞等待一个队列、信号量、事件组、通知或信号量事件。处于阻塞状态的任务通常有一个“超时”周期,在此之后任务将超时并被解除阻塞,即使任务等待的事件尚未发生。

处于阻塞态的任务不占用任何处理器的时间,且不会被选择进入运行态。

4、挂起态(Suspended)

与处于阻塞态的任务一样,处于挂起态的任务不能被调度器调度,处于挂起态的任务没有超时时间。进入Suspended状态的唯一方法是调用 vTaskSuspend() API 函数,退出Suspended状态唯一的方法是调用 vTaskResume() 或 TaskResumeFromISR() API 函数。

从上面图中可以看出,调度器只能调度处在ready状态的任务去执行。

ref:

https://blog.csdn.net/mengdecun428/article/details/102600026

https://www.freertos.org/Documentation/RTOS_book.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值