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

这篇博客介绍了如何在FreeRTOS操作系统中实现任务的挂起和取消挂起功能。通过创建两个动态任务,一个控制LED闪烁,另一个检测按键。当按键KEY0按下时,LED闪烁任务被挂起,而当按键KEY1被按下,任务则被恢复,LED继续闪烁。实验详细阐述了在CubeMX中的配置步骤以及关键函数`osThreadSuspend`和`osThreadResume`的使用,最终测试成功验证了功能实现。
摘要由CSDN通过智能技术生成

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.测试成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值