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。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)