0

我正在通过带有 TTGO 模块的 Visual Studio Code 中的 PlatformIO 使用 ESP-IDF,并希望使用 vTaskDelayUntil() 函数来实现解锁延迟。不幸的是,在使用它时,该任务没有任何反应。

#define INCLUDE_vTaskDelayUntil 1 已在配置中设置。

这是我的代码:

void blink_task(void *pvParameter)
{
  TickType_t xLastWakeTime;
  const TickType_t DelayLED = 250/portTICK_PERIOD_MS;
  xLastWakeTime = xTaskGetTickCount();

  bool LEDstatus = false;

  gpio_pad_select_gpio(BLINK_GPIO);
  gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);

  for(;;){
    vTaskDelayUntil( &xLastWakeTime, DelayLED);
    if (LEDstatus == false)
    {
        gpio_set_level(BLINK_GPIO, 0);
        LEDstatus = true;
    }
    else
    {
        gpio_set_level(BLINK_GPIO, 1);
        LEDstatus = false;
    }       
  }
}


extern "C" int app_main(void)
{
    xTaskCreatePinnedToCore(&blink_task, "blink_task", configMINIMAL_STACK_SIZE, NULL, 5, NULL, 0);

    return 0;
}

vTaskDelay() 工作得非常好,但是当我添加另一个任务时会有很大的滞后。这就是我想使用 vTaskDelayUntil 的原因。

有谁知道这里出了什么问题?

非常感谢您提前。

此致,

马丁

4

1 回答 1

0

FreeRTOS 使用预兆系统来调度任务,这意味着如果一个更高优先级的任务处于运行状态,调度器永远不会切换到另一个任务。检查所有任务的优先级,并确保具有较高优先级的任务不会长时间工作!另一个问题可能是堆栈大小,增加堆大小并再次检查。

于 2018-04-22T10:04:25.090 回答