CubeMX+freertos任务挂起与恢复
前言:当不需要的运行某个任务时,就将这个任务挂起,当要重新运行这个任务的话就恢复这个任务的运行。
实现功能:任务一:LED灯没500ms翻转一次,任务二:按下KEY0时任务一被挂起暂停,按下KEY1时任务一恢复。
CubeMX设置
任务的设置:


按键设置:

代码
/* USER CODE END Header_StartTask01_LED */ void StartTask01_LED(void const * argument) { /* USER CODE BEGIN 5 */ /* Infinite loop */ for(;;) { HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1); osDelay(500); } /* USER CODE END 5 */ } /* USER CODE BEGIN Header_StartTask01_KEY */
/* USER CODE END Header_StartTask01_KEY */ void StartTask01_KEY(void const * argument) { /* USER CODE BEGIN StartTask01_KEY */ /* Infinite loop */ u8 KEY_Flag = 0; for(;;) { if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == 0 && KEY_Flag == 0) { osThreadSuspend(myTask01_LEDHandle);//挂起线程 KEY_Flag = 1; } if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1) == 0 && KEY_Flag == 1) { osThreadResume(myTask01_LEDHandle);//释放线程 KEY_Flag = 0; } osDelay(1); } /* USER CODE END StartTask01_KEY */ }
可以实现预期功能
API函数:
任务挂起 vTaskSuspend()
任务恢复 vTaskResume()
中断函数中进行任务恢复 xTaskResumeFromISR()
void vTaskSuspend( TaskHandle_t xTaskToSuspend )
参数:xTaskToSuspend(需要挂起的任务句柄)
void vTaskResume( TaskHandle_t xTaskToResume )
参数:xTaskToResume(需要恢复的任务句柄)
BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume )
总结:这三个函数用起来比较简单的,只需要传入任务的句柄即可。

浙公网安备 33010602011771号