优先级的介绍
优先级的取值范围是:0~(configMAX_PRIORITIES – 1),数值越大优先级越高。
FreeRTOS会确保最高优先级的、可运行的任务,马上就能执行。
对于相同优先级的、可运行的任务,轮流执行
任务的执行顺序
对于同优先级的任务,它们“轮流”执行。怎么轮流?你执行一会,我执行一会。
"一会"怎么定义?
人有心跳,心跳间隔基本恒定。
FreeRTOS中也有心跳,它使用定时器产生固定间隔的中断。这叫Tick、滴答,比如每10ms发生一次时钟中断。
如下图:
假设t1、t2、t3发生时钟中断。
两次中断之间的时间被称为时间片(time slice、tick period)。
时间片的长度由configTICK_RATE_HZ 决定,假设configTICK_RATE_HZ为100,那么时间片长度就是10ms。
实验1
创建个任务,且任务优先级相同。
每一个任务都打印串口,且当前执行那个任务,哪个任务的状态值就为1.
可以看到实验结果,因为3个任务的优先级都一样,所以三个任务按时间片轮流执行。
实验2
创建3个任务,其中一个任务优先级高于另外两个。
可以看到只有任务3在执行。这是因为任务3的优先级高于另外两个任务。
实验3
创建三个任务优先级一样的任务,当任务2执行100次删除任务1,执行200次时删除任务2。
实验结果:当任务1和任务2删除后,只执行任务3
实验4
通过同一个任务函数创建两个不同的任务。
看到实验结果:有两个任务在运行。