前言
所谓时间片就是同一个优先级下可以有多个任务,每个任务轮流地享有相同的CPU时间,享有CPU的时间叫做时间片。在FreeRTOS中时间片的大小只能是一个tick。
1、原理分析
系统在任务切换的时候会从就绪列表中寻找优先级最高的任务来执行,这个功能由taskSELECT_HIGHEST_PRIORITY_TASK()函数来实现,该函数在task.c 中定义。
4.1、taskSELECT_HIGHEST_PRIORITY_TASK()函数
4.2、taskRESET_READY_PRIORITY()函数
2、修改代码,支持优先级
其实,我们的代码已经支持了时间片,实现的算法与 FreeRTOS 官方是一样的, 即
taskSELECT_HIGHEST_PRIORITY_TASK()和 taskRESET_READY_PRIORITY()这两个函
数的实现。 但是在代码的编排组织上与 FreeRTOS 官方的还是有点不一样,为了与
FreeRTOS 官方代码统一起来,我们还是稍作修改。
2.1、xPortSysTickHandler()函数
修改 xTaskIncrementTick()函数