1.任务的挂起与恢复的API函数
vTaskSuspend() ——挂起任务(类似暂停,可恢复,但删除任务,无法恢复) vTaskResume() ——恢复被挂起的任务 xTaskResumeFromISR()—— 在中断中恢复被挂起的任务
1.1.任务挂起函数vTaskSuspend()
void vTaskSuspend ( TaskHandle_t xTaskToSuspend)
形参:待挂起任务句柄 此函数用于挂起任务,使用时需将宏 INCLUDE_vTaskSuspend 配置为 1。 无论优先级如何,被挂起的任务都将不再被执行,直到任务被恢复 。 当传入的参数为NULL,则代表挂起任务自身(当前正在运行的任务)
1.2.任务恢复函数vTaskResume()
void vTaskResume ( TaskHandle_t xTaskToSuspend)
形参:待恢复任务句柄 使用该函数注意宏:INCLUDE_vTaskSuspend必须定义为 1 注意:任务无论被 vTaskSuspend() 挂起多少次,只需在任务中调用 vTakResume() 恢复一次,就可以继续运行。且被恢复的任务会进入就绪态!
1.3.任务恢复函数(中断)xTaskResumeFromISR()
BaseType_t xTaskResumeFromISR ( TaskHandle_t xTaskToResume)
形参:待恢复任务句柄 返回值:pdTRUE任务恢复后需要进行任务切换;pdFALSE任务恢复后不需要进行任务切换 使用该函数注意宏:INCLUDE_vTaskSuspend 和 INCLUDE_xTaskResumeFromISR 必须定义为 1 该函数专用于中断服务函数中,用于解挂被挂起任务 中断服务程序中要调用freeRTOS的API函数则中断优先级不能高于FreeRTOS所管理最高优先级
2.任务挂起与恢复实验
实验目的:学会 使用FreeRTOS中的任务挂起与恢复相关API函数:vTaskSuspend( )、 vTaskResume( )、xTaskResumeFromISR( ) 实验设计:将设计四个任务:start_task、task1、task2、task3 start_task:用来创建其他的三个任务 task1:实现LED0每500ms闪烁一次 task2:实现LED1每500ms闪烁一次 task3:判断按键按下逻辑,KEY0按下,挂起task1,按下KEY1在任务中恢复task1 EXTI:按下KEY2,在中断中恢复task1(外部中断线实现)
3.任务挂起和恢复API函数解析
3.1.任务挂起函数vTaskSuspend()函数解析
3.2.任务恢复函数vTaskResume() 函数解析
3.3.任务恢复函数(中断)xTaskResumeFromISR()函数解析