wenbo2005.online

学习记录 / FreeRTOS

RTOS 延时使用

FreeRTOS2024-07-11
1,跟换时钟systick->tim6,开启FreeRTOS版本一;

2,创建任务后,在include parameters 中,开启vTaskDelayUntil (其延时函数更精准);

3,例如:

void StartDefaultTask(void const * argument)
{
      /* USER CODE BEGIN StartDefaultTask */
      /* Infinite loop */
    uint32_t led_time = osKernelSysTick();       //获取计数值
      for(;;)
      {
        HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
            //osDelay(100);                      //延时大约100毫秒,慢慢会出现偏差
        osDelayUntil(&led_time,50);            //调用即可,延时50毫秒
      }
  /* USER CODE END StartDefaultTask */
}

例如:有一个串口接收指令任务UsartRev,函数处理时间大概2ms,任务内分别Task1使用vTaskDelay延迟10ms或者Task2使用vTaskDelayUntil延迟10ms,不考虑任务被抢占而造成的影响。实际运行效果:

Task1: Tusartrev  + Tvtaskdelay :  2ms +  10ms = 12ms 一个周期

Task2: Tusartrev  + TvtaskDelayuntil :  10ms 一个周期(2ms 包含在10ms内)