全部学习汇总: ​​GitHub - GreyZhang/g_FreeRTOS: learning notes about FreeRTOS.​

1273_FreeRTOS静态创建任务实现分析_动态创建

先看看这个条件是否成立,很简单的方式是直接print出来看看。这里,我用了一个变量做中转主要是考虑到欧文件的包含顺序可能会导致宏定义的不同的定义形式。如果是在这里用变量取值的话,可靠得多。

1273_FreeRTOS静态创建任务实现分析_FreeRTOS_02

通过这个结果,看得出来这个是生效的。

1273_FreeRTOS静态创建任务实现分析_FreeRTOS_03

这里测试的是数据类型的大小,但是实际上是为了保证存储空间能够有一定的一致性。

1273_FreeRTOS静态创建任务实现分析_动态创建_04

静态创建任务的时候,一定程度上跟动态创建有相似之处。只是,静态创建的时候堆栈空间的分配没有了动态时候的申请过程。

1273_FreeRTOS静态创建任务实现分析_动态创建_05

标注任务创建的模式,之后初始化新的任务然后把任务增加到就绪任务链表。

这样,静态方式创建任务的实现就分析完成了。这部分跟动态创建任务的时候其实复杂度差不多,没什么太大的变化。但是,之前看动态创建任务的过程的时候上面的任务初始化以及加入到就绪链表的过程一起分析了,因此感觉上上一个任务创建的方式麻烦。其实,没有太大的差异。

从操作方式上看,其实静态创建还是有一定的优势的,那就是初始化的速度肯定是很快的。在任务创建的过程中,比较有复杂度的动作反倒是在最后链表的处理中。链表的初始化其实没有什么特别的信息,但是加入到就绪任务链表的时候,如果这个OS的配置支持抢占模式的时候那么可能会有任务调度的请求。而且,任务创建可能随时发生而不是必须仅限于初始化的时候,这样就可能出现多种不同的情况了。

现在看来,搜集了一部分信息建立了一定的概念之后,现在的内核代码看上去比最初的时候舒服一些了。