5.4 任务优先级
每 个 任 务 都 可 以 分 配 一 个 从 0~(configMAX_PRIORITIES-1) 的 优 先 级 ,
configMAX_PRIORITIES 在文件 FreeRTOSConfig.h 中有定义,前面我们讲解 FreeRTOS 系统配
置的时候已经讲过了。如果所使用的硬件平台支持类似计算前导零这样的指令(可以通过该指令
选 择 下 一 个 要 运 行 的 任 务 , Cortex-M 处 理 器 是 支 持 该 指 令 的 ) , 并 且 宏
configUSE_PORT_OPTIMISED_TASK_SELECTION 也 设 置 为 了 1 , 那 么 宏
configMAX_PRIORITIES 不能超过 32!也就是优先级不能超过 32 级。其他情况下宏
configMAX_PRIORITIES 可以为任意值,但是考虑到 RAM 的消耗,宏 configMAX_PRIORITIES
最好设置为一个满足应用的最小值。
优先级数字越低表示任务的优先级越低,0 的优先级最低,configMAX_PRIORITIES-1 的优
先级最高。空闲任务的优先级最低,为 0。
FreeRTOS 调度器确保处于就绪态或运行态的高优先级的任务获取处理器使用权,换句话说
就是处于就绪态的最高优先级的任务才会运行。当宏 configUSE_TIME_SLICING 定义为 1 的时
候多个任务可以共用一个优先级,数量不限。默认情况下宏 configUSE_TIME_SLICING 在文件
FreeRTOS.h 中已经定义为 1。此时处于就绪态的优先级相同的任务就会使用时间片轮转调度器
获取运行时间。
5.5 任务实现
在使用 FreeRTOS 的过程中,我们要使用函数 xTaskCreate()或 xTaskCreateStatic()来创建任
务,这两个函数的第一个参数 pxTaskCode,就是这个任务的任务函数。什么是任务函数?任务
函数就是完成本任务工作的函数。我这个任务要干嘛?要做什么?要完成什么样的功能都是在
这个任务函数中实现的。 比如我要做个任务,这个任务要点个流水灯,那么这个流水灯的程序
就是任务函数中实现的。FreeRTOS 官方给出的任务函数模板如下:
void vATaskFunction(void *pvParameters) (1)
{