注:在使用大多数功能时,FreeRTOS都要将对应的宏置为1,具体的需要查看FreeRTOS官方文档。
任务的挂起类似于暂停,可进行恢复。
FromlSR后缀的函数是专用于中断的API函数。
任务切换流程图
所有任务只有进入就绪态后才可以进入运行态。
函数基础
任务挂起
1.vTaskSuspend():
1 | void vTaskSuspend(TaskHandle_t xTaskToSuspend)
参数:
- xTaskToSuspend:待挂起的任务句柄。
当传入参数为NULL时,则为挂起任务自身。
使用步骤:
1.将对应宏置为 1
2.定义函数的入口参数
任务恢复
2.vTaskResume():
void vTaskResume(TaskHandle_t xTaskToResume)
参数:
- xTaskToResume:待恢复任务的任务句柄
任务无论被挂起多少次,只需要任务中调用函数回复一次,则任务进入就绪态。
任务恢复(中断)
xTaskResumeFromISR():
BaseType_t xTaskResumeFromISR(TaskHandle_t xTaskToResume)
参数:
- xTaskToResume:待恢复任务的任务句柄
返回值为pdTRUE表示任务恢复后需要进行任务切换。
注:中断服务函数调用API函数时,中断优先级不能高于FreeRTOS所管理的最高优先级。
FreeRTOSS所管理的优先级范围为5-15,也就是不能管理优先级为0-4的高优先级。
也就是在配置中断时,需要将NVIC分组配置为分组4(全部设置为抢占式优先级),且选择低于4的抢占优先级。
函数的内部实现
函数的内部实现如果需要详细了解,建议查看源码。
任务挂起
注:运行过程中的任务切换是通过触发PendSV的中断进行的