开启任务调度器
开启任务调度器API函数:vTaskStartScheduler()
作用:用于启动任务调度器,任务调度器启动后, FreeRTOS 便会开始进行任务调度,即开始任务,如果不启用调度器,那么任务是得不到执行的。
该函数内部实现,如下:
1、先判断任务是静态创建还是动态创建,如果是动态创建,就会先创建空闲任务。
2、如果使能软件定时器,则创建定时器任务。
3、关闭中断,防止调度器开启之前或过程中,受中断干扰,会在运行第一个任务时打开中断。
4、初始化全局变量(下一个任务的阻塞超时的时间设置为0xFFFFFFFF、调度器运行状态变量设置为pdTRUE、心跳节拍计数器设置为0),并将任务调度器的运行标志设置为已运行。
5、初始化任务运行时间统计功能的时基定时器。
6、调用函数 xPortStartScheduler()。
xPortStartScheduler()函数是什么呢?
配置与开启第一任务API函数:xPortStartScheduler()
作用:该函数用于完成启动任务调度器中与硬件架构相关的配置部分,以及启动第一个任务。
该函数内部实现,如下:
1、检测用户在 FreeRTOSConfig.h 文件中对中断的相关配置是否有误(非重点)。
2、配置 PendSV 和 SysTick 的中断优先级为最低优先级。
3、调用函数 vPortSetupTimerInterrupt()配置 SysTick(滴答定时器)变成1ms中断一次。
4、初始化临界区嵌套计数器为 0。
5、调用函数 prvEnableVFP()使能 FPU。
6、调用函数 prvStartFirstTask()启动第一个任务
启动第一个任务