FreeRTOS基础之任务调度机制

FreeRTOS基础之任务调度机制

1 、什么是任务的调度机制

​ 调度算法决定了哪个就绪(Ready)状态任务转换到运行(Running)状态。
对于单个内核而言,由于每个时刻,只能有一个任务是实际处于运行状态的,其它任务只能处理运行态以外的其它态(阻塞态blocked,就绪态Ready,暂停态Suspended)。因此,当FreeRTOS在任务调度时必须以一种规则来决定选择哪一个Ready状态的任务来进入Running状态。

2、任务调度算法

FreeRTOS有三种调度算法,分别是:

第一种:具有时间片的优先级抢先调度 Prioritized Pre-emptive Scheduling with Time Slicing

第二种:优先级抢先调度(无时间片)Prioritized Pre-emptive Scheduling (without Time Slicing)

第三种:合作调度Co-operative Scheduling

configUSE_PREEMPTION

该算法是配置任务是否具有可抢占的功能,即当高优先级的任务就绪时能否打断低优先级的任务而执行。
定义为 1 代表具有抢占功能,定义为 0 代表不具有抢占功能。

configUSE_TIME_SLICING

该算法是配置 同等 优先级的任务是否具备轮流执行的功能。如果不配置的话,意味着获得执行权限的任务在不结束的情况下会一直执行下去。
定义为 1 代表具有轮流执行的功能,定义为 0 代表不具有轮流执行的功能。

configIDLE_SHOULD_YIELD

该算法是配置空闲任务是否具有 让步 于其他任务的功能。如果配置的话,空闲任务在执行完自己的任务后会立即释放,让其他任务执行,而不会循环执行,即空闲任务占用的时间比较少;否则在时间片轮转的情况下会与其他任务轮流执行。
定义为 1 代表具有让步于其他任务的功能,定义为 0 代表不具有让步于其他任务的功能。
配置项 A B C D E
configUSE_PREEMPTION 1 1 1 1 0
configUSE_TIME_SLICING 1 1 0 0 x
configIDLE_SHOULD_YIELD 1 0 1 0 x
说明 常用 很少用 很少用 很少用 几乎不用
  • A:可抢占+时间片轮转+空闲任务让步
  • B:可抢占+时间片轮转+空闲任务不让步
  • C:可抢占+非时间片轮转+空闲任务让步
  • D:可抢占+非时间片轮转+空闲任务不让步
  • E:合作调度

对于任务调度算法,通过在文件 FreeRTOSConfig.h 中进行配置。

你可能感兴趣的:(FreeRTOS,c语言,算法,嵌入式硬件,单片机,物联网)