目录
1 任务状态
我们可以很简单地把任务的状态分为2种:运行(Runing)、非运行(Not Running)。对于非运行的状态,还可以继续细分为:阻塞状态(Blocked) 、暂停状态(Suspended) 、就绪状态(Ready)

1.1 阻塞状态(Blocked)
在FreeRtos程序中,我们不会让一个程序一直运行,而是使用“事件驱动”的方式让他运行:任务要等待某个事件,事件发生后它才能运行;在等待事件的过程中,它不消耗CPU资源;在等待事件的过程中,这个任务就处于阻塞状态(Blocked)。
在阻塞状态的任务,它可以等待两种类型的事件:
- 时间相关的事件
- 同步事件:队列(queue)、二进制信号量(binary semaphores)、计数信号量(counting semaphores)、互斥量(mutexes)、递归互斥量(recursive mutexes)、事件组(event groups)、任务通知(task notifications) (这些概念后面会说)
1.2 暂停状态(Suspended)
FreeRtos中的任务可以进入暂停状态。
1.3 就绪状态(Ready)
任务完全准备好了,随时可以运行:只是还轮不到它。这时,它就处于就绪态(Ready)。
下图是完整的状态转换图:

2 示例程序
2.1例程功能
创建一个按键任务和一个LED任务,LED任务执行LED闪烁的程序,按键任务检测按键是否按下,将LED任务挂起或解挂起。
2.2步骤
配置LED灯和按键的IO口

本文详细介绍了FreeRTOS中任务的三种状态——运行、阻塞和就绪,并通过示例程序展示了如何在C语言中使用FreeRTOS API进行任务挂起和解挂起操作。实验结果显示,通过按键控制LED闪烁任务的执行状态,实现了任务状态的动态切换。
最低0.47元/天 解锁文章
636

被折叠的 条评论
为什么被折叠?



