FREERTOS学习笔记二-任务的挂起与取消挂起
1.实验内容
创建两个动态任务,任务一控制LED的闪烁,任务二用于检测按键。当按键KEY0按下时,任务一被挂起;当按键KEY1被按下时,任务一被取消挂起。
2.CubeMX的配置
2.1选择调试模式
2.2使能高速时钟
2.3设置基准时钟源
2.4配置LED
2.5配置按键KEYO与KEY1
2.6创建两个动态任务
2.7设置时钟
3.程序编写
3.1LED任务
void StartLED_RED_Task(void const * argument)
{
/* USER CODE BEGIN StartLED_RED_Task */
/* Infinite loop */
for(;;)
{
HAL_GPIO_TogglePin(LED_RED_GPIO_Port,LED_RED_Pin);
osDelay(500);
}
/* USER CODE END StartLED_RED_Task */
}
3.2按键任务
void StartKEY_Task(void const * argument)
{
/* USER CODE BEGIN StartKEY_Task */
/* Infinite loop */
uint16_t KEY_Flag = 0;
for(;;)
{
if(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin) == 0 && KEY_Flag == 0)
{
osThreadSuspend(LED_RED_TaskHandle);//挂起线程
KEY_Flag = 1;
}
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin) == 0 && KEY_Flag == 1)
{
osThreadResume(LED_RED_TaskHandle);//释放线程
KEY_Flag = 0;
}
osDelay(1);
}
/* USER CODE END StartKEY_Task */
}
3.3关键函数
osThreadSuspend(LED_RED_TaskHandle);//挂起线程
osThreadResume(LED_RED_TaskHandle);//释放线程