freeRTOS vTasDelayUntil 不起作用



我在Visual Studio Code中使用ESP-IDF通过PlatformIO和TTGO模块,并希望使用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() 工作得很好,但当我添加另一个任务时会出现很大的滞后。这就是我想使用 vTaskDelayUntill 的原因。

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

提前非常感谢你。

此致敬意

马丁

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

相关内容

  • 没有找到相关文章

最新更新