1、前期学习准备
在专栏一开头的前七篇文章都是在为学习FreeRTOS做一些前期的准备,学习完这几篇将会较为容易地进行后面的学习。
在第五篇文章中我们学习了一个任务的创建需要做哪些的前期准备——即任务控制块、任务句柄的一些理解。
在第六篇文章中我们学习了什么是现场及现场保护的几种方式。
2、任务的创建
在第八篇文章中简述了任务是如何进行创建的、任务启动的流程及多任务创建的两种风格。
动态任务创建的一个流程大概如下:
3、任务启动的流程及多任务创建的两种风格
和第九篇文章中,简述了任务启动的流程及多任务创建的两种风格。
4、临界资源的访问
在第十篇文章中我们学习了临界资源和临界区的含义,并且学习了两种临界资源的访问方法(以及一些原理)。
5、任务管理
在第十一篇文章中学习了任务的状态有哪些,以及在FreeRTOS中是如何进行任务管理的。
每个任务状态均有一个链表,任务的管理均是通过链表来进行操作的。换句话说即是每个任务的实时状态均是通过挂载在相应的任务状态链表来维持的。
如就绪链表中又根据优先级可分为5个链表,存放的流程大概可分为如下(实际一步到位,直接完成的):
1)首先判断任务是就绪态,即把这个任务放到就绪链表中。
2)又根据这个任务的优先级具体细分到需要把这个任务挂载在哪个优先级的就绪链表中。
除此之外还学习到了空闲任务的主要作用是:进行删除任务后的内存清零工作。
6、tick中断——RTOS的时钟基准,也是任务切换的基础
对于任务来说,其状态发送改变的同时,会对任务本身挂载的链表进行更新。如:当任务发生阻塞的时候,会同时立即更新任务的状态链表。
7、任务调度算法
在任何时刻,只有一个任务得到运行,每个任务都在自己的环境中运行,而这个运行的任务由FreeRTOS的调度器决定。
FreeRTOS 中的任务是抢占式调度机制,高优先级的任务可打断低优先级正在运行任务,低优先级任务必须在高优先级任务阻塞或结束后才能得到调度。
同时 FreeRTOS 也支持时间片轮转调度方式,只不过时间片的调度是不允许抢占任务的 CPU 使用权。即在任务同等优先级的基础上,决定各个任务是否交替执行(即每个任务执行一个tick)
具体配置如下图: