13.4.1 开启调度
更新于 2026年10月10日
版权声明
13.4.1 开启调度
在FreeRTOS中,任务调度的开启是通过vTaskStartScheduler()函数实现的,FreeRTOS调度器启动流程如图13.13所示。
FreeRTOS在任务调度器的启动阶段,会默认自动创建空闲任务prvIdleTask,空闲任务优先级默认为最低优先级。若设置了软件定时器,则创建软件定时器,然后设置调度器运行状态。通过xPortStartScheduler()函数完成对调度器的硬件初始化。第一次启动触发SVC异常,将第一个运行的任务的数据从堆栈中弹给CPU。

图13.13 FreeRTOS调度器启动流程
调度函数vTaskStartScheduler()的主要代码如下。

主要语句功能如下。(https://www.daowen.com)
①创建空闲任务,优先级tskIDLE_PRIORITY=0,优先级最低。
②如果使用软件定时器,还需要通过函数xTimerCreateTimerTask()来创建定时器服务任务。
③变量xSchedulerRunning设置为pdTRUE,表示调度器开始运行。
④节拍定时器SysTick的计数值设为0。
⑤当宏configGENERATE_RUN_TIME_STATS为1时,使能时间统计功能,此时需要用户实现宏portCONFIGURE_TIMER_FOR_RUN_TIME_STATS,此宏用来配置一个定时器或计数器。
⑥调用xPortStartScheduler()函数来触发一次PendSV中断,并开启节拍定时器SysTick。