FreeRTOS的任务挂起与恢复

发布时间:2026/8/30 6:15:52
FreeRTOS的任务挂起与恢复 一、任务的挂起与恢复的API函数vTaskSuspend()挂起任务, 类似暂停可恢复vTaskResume()恢复被挂起的任务xTaskResumeFromISR()在中断中恢复被挂起的任务1、任务挂起函数voidvTaskSuspend(TaskHandle_txTaskToSuspend)xTaskToSuspend待挂起任务的任务句柄为NULL表示挂起任务自身。需将宏INCLUDE_vTaskSuspend配置为 1。2、​​​​​​​任务恢复函数voidvTaskResume(TaskHandle_txTaskToResume)INCLUDE_vTaskSuspend必须定义为 1。不论任务被使用 vTaskSuspend() 挂起多少次只需调用 vTaskResume() 一次即可使其继续执行。被恢复的任务会重新进入就绪状态。3、任务恢复函数中断中恢复​​​​​​​1函数说明BaseType_txTaskResumeFromISR(TaskHandle_txTaskToResume)返回值如下pdTRUE任务恢复后需要进行任务切换。pdFALSE任务恢复后不需要进行任务切换。2注意事项INCLUDE_vTaskSuspend 和 INCLUDE_xTaskResumeFromISR 必须定义为 1。在中断服务程序中调用FreeRTOS的API函数时中断的优先级不能高于FreeRTOS所管理的最高中断优先级。4、​​​​​​​挂起与恢复调度器vTaskSuspendAll()挂起任务调度器调度器不会进行任务切换当前任务一直运行。xTaskResumeAll()恢复任务调度器调度器继续任务切换。5、查看任务状态/*开启跟踪task信息*/#defineconfigUSE_TRACE_FACILITY1#defineconfigUSE_STATS_FORMATTING_FUNCTIONS1voidvTaskList(char*pcWriteBuffer)名称状态优先级堆栈使用任务编号X(运行) B阻塞、R就绪、S暂停或D删除。二、任务挂起与恢复实验1、实验目标start_task:用来创建其他的三个任务。task1实现LED1每500ms闪烁一次。task2实现LED2每500ms闪烁一次。task3判断按键按下逻辑KEY1按下挂起task1按下KEY2在任务中恢复task1KEY3按下挂起调度器KEY4按下恢复调度器并打印任务的状态。2、​​​​​​​FreeRTOSConfig.h代码清单#defineINCLUDE_vTaskSuspend1#defineINCLUDE_xResumeFromISR1/*开启跟踪task信息*/#defineconfigUSE_TRACE_FACILITY1#defineconfigUSE_STATS_FORMATTING_FUNCTIONS1​​​​​​​3、freertos_demo.c代码只需要在动态编码的基础上改动任务三即可

相关新闻