FreeRtos vTaskStartScheduler解析
GaoSheng Lv4

本文介绍介绍一下vTaskStartScheduler函数。
首先是traceENTER_vTaskStartScheduler ,是一个 可自定义的调试宏,默认无操作,可自行实现

创建空闲任务,根据是否支持静态内存管理,使用静态方式或动态方式创建空闲任务。
图片1

在FreeRTOSConfig.h 中定义configSUPPORT_STATIC_ALLOCATION == 0
由xTaskCreate()动态创建空闲任务

创建定时器服务任务,创建定时器服务任务需要配置启用软件定时器,创建定时器服务任务,同样是根据是否配置支持静态内存管理,使用静态或动态方式创建定时器服务任务
图片2

在FreeRTOSConfig.h 中定义configSUPPORT_DYNAMIC_ALLOCATION == 1
由xTimerCreate动态创建定时器服务

关闭中断,使用portDISABLE_INTERRUPT() 关闭中断,这种方式只关闭受 FreeRTOS 管理的中断。关闭中断主要是为了防止 SysTick 中断在任务调度器开启之前或过程中,产生中断。FreeRTOS 会在开始运行第一个任务时,重新打开中断。
图片3

初始化一些全局变量,并将任务调度器的运行标志设置为已运行
图片4

配置运行时统计计时器(如果启用了运行时分析),调用跟踪宏,记录任务切入。初始化任务运行时间统计功能的时基定时器,任务运行时间统计功能需要一个硬件定时器提供高精度的计数,这个硬件定时器就在这里进行配置,如果配置不启用任务运行时间统计功能的,就无需进行这项硬件定时器的配置。
图片5

最后就是调用函数 xPortStartScheduler()。
xPortStartScheduler()负责初始化中断优先级
验证中断向量表中关键 FreeRTOS 中断处理函数是否正确安装(如果配置了configCHECK_HANDLER_INSTALLATION == 1)
设置 MPU(如果启用),启动系统时钟中断(SysTick 或其他),启动第一个任务,进入任务调度

本站由 提供部署服务