FreeRTOS任务调度程序如何工作的

2021-09-11 08:45发布

我一直在阅读官网文档:

Https://www.freertos.org/a00132.html

我不明白如何使用vTaskStartScheduler()。我可以创建任务,但据我所知,仅创建任务是不够的。只有在调度程序启动时才会执行任务。

示例用法:

void vAFunction( void )
{
     // Tasks can be created before or after starting the RTOS
     scheduler
     xTaskCreate( vTaskCode,
                  "NAME",
                  STACK_SIZE,
                  NULL,
                  tskIDLE_PRIORITY,
                  NULL );

     // Start the real time scheduler.
     vTaskStartScheduler();

     // Will not get here unless there is insufficient RAM.
}


3条回答
wupeng1
2021-09-11 09:11 .采纳回答

我从来没用过FreeRTOS,但我根据多年来使用其他RTOS的经验来回答您的这个问题。

你的理解是正确的。

创建任务只会在调度程序使用的数据结构中创建一些程序入口。

当您的代码调用vTaskStartScheduler()时,您的代码将任务执行的控制权交给调度程序。

这一点从这句注释中可以看到:"Will not get here unless there is insufficient RAM"。

在调用vTaskStartScheduler()之后,调度程序将根据任务的优先级运行您的任务,不管它们是否被阻塞,等等。


一周热门 更多>