1开启任务调度器:在此函数包括创建空闲任务(优先级最低),创建定时器服务任务(软件定时器,该步骤是条件编译可以用宏关闭)。然后会先关闭中断,在SVC中断服务函数中再重新打开。配置时间统计功能的定时器(条件编译,一般调试时才会用)。还包括其他硬件的初始化如滴答定时器、FPU单元、PendSV中断等等(这些有相关函数去调用实现或是寄存器直接配置)。
2空闲任务的意义:保证系统任何时刻都有一个任务进行,其次是处理一些琐事如有任务删除时在这空闲任务里执行其内存释放又如运行用户设置的空闲任务钩子函数又或者是在低功耗模式下执行其他处理。(空闲任务不需要手动创建)
3任务创建:首先申请任务堆栈内存再申请任务控制块内存,然后进行任务控制块的堆栈那部分内容初始化(注意不是所有信息都初始化),若控制块内存不足则创建失败并且释放之前申请的所有内存,否则标记该任务是动态创建的然后继续初始化任务的大部分信息并添加到就绪列表(静态和动态的删除任务等处理不一样因此要标记区分)。、
4任务初始化:任务创建过程剩下任务堆栈和任务控制块所有未初始化信息在此初始化,此外(注意,标记任务堆栈栈顶,任务数组名必须以’\0’结尾,该任务列表项的value值是关系任务的优先级,因为列表插入列表项顺序是升序的,即数字越大越后面,执行优先级越低)。
5任务就绪表:不同状态都由对应的一个列表,就绪态的任务就被添加到任务就绪表。其次,任务就绪表是个数组列表,因为FreeRTOS允许任务相同优先级,因此每一个优先级需要一个相同的就绪列表。其中,有全局变量统计任务个数,创建列表时看是不是第一个任务,是则需要初始化列表。新建任务优先级比当前任务优先级高是,任务控制块要指向当前新建任务的任务控制块,且需要任务切换了
6删除任务:同样的也是调用相关函数,入口参数为任务句柄,函数开头需调用函数获取任务控制块。但分两种情况,一种是删除正在运行的任务,要先