关于Clion与FReeRTOS的删除任务时发现的一些有趣现象的理解

        FreeRTOS我也是近期才开始学习在使用任务删除的时候遇见这样的问题:按键按下之后只闪烁绿光。我想这应该是删除了任务一是正确的现象。但是后面复位之后按下按键之后红绿交替闪烁。按说不对阿。那不是没删除吗?代码如下。

 

void LED_Task1(void *argument)
{
  
  for(;;)
  {
      HAL_GPIO_WritePin(GPIOE,GPIO_PIN_7,GPIO_PIN_RESET);
      vTaskDelay(1000);
      HAL_GPIO_WritePin(GPIOE,GPIO_PIN_7,GPIO_PIN_SET);
      vTaskDelay(1000);

  }
  /* USER CODE END LED_Task1 */
}


void LED_Task2(void *argument)
{
 
  for(;;)
  {

      HAL_GPIO_WritePin(GPIOE,GPIO_PIN_8,GPIO_PIN_SET);
        vTaskDelay(1000);
      HAL_GPIO_WritePin(GPIOE,GPIO_PIN_8,GPIO_PIN_RESET);
      vTaskDelay(1000);
      if(HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_10)==0)
      {
        vTaskDelete(LED1Handle);
          LED1Handle==NULL;
      }

  }
 
}

然后我就注释掉绿灯闪烁的步骤。

然后就进行将任务二只作为删除任务。

void LED_Task1(void *argument)
{
 
  for(;;)
  {
      HAL_GPIO_WritePin(GPIOE,GPIO_PIN_7,GPIO_PIN_RESET);
      vTaskDelay(1000);
      HAL_GPIO_WritePin(GPIOE,GPIO_PIN_7,GPIO_PIN_SET);
      vTaskDelay(1000);

  }
void LED_Task2(void *argument)
{
 
  for(;;)
  {

//      HAL_GPIO_WritePin(GPIOE,GPIO_PIN_8,GPIO_PIN_SET);
//        vTaskDelay(1000);
//      HAL_GPIO_WritePin(GPIOE,GPIO_PIN_8,GPIO_PIN_RESET);
//      vTaskDelay(1000);
      if(HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_10)==0)
      {
        vTaskDelete(LED1Handle);
          LED1Handle==NULL;
      }

  }
 
}

然后进行烧录之后发现在红灯闪烁的时候,如果你在亮灯的时候删除任务的话灯会一直亮,但是如果你在灯灭的时候按下的话它会一直处于暗的情况。

我们可以使用示波器直观的感受一下。这个是灯灭的时候(因为这个灯是共阳极接法所以是高电平)

 

示波器测试闪烁的状态

 灯灭的时候是这样的,它们会一直在两种状态之间切换,这是正常闪烁的状态。

但是当我们按下按键之后你不难发现任务删除之后它只处于其中的一种状态要么高要么低。

 由此可知,我们删除任务的时候删除的是任务本身,而不是删除的执行的内容,删除了这个任务之后它所处于的特殊状态不会因此而改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值