FREERTOS学习笔记二-任务的挂起与取消挂起

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);//释放线程

4.测试成功


版权声明:本文为qq_46384359原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。