这部分内容是官方文档中的例程1的学习、调试以及简单的修改尝试。从内容看,主要的目的是简单展示一下如何创建一个Task。

         首先,看一下其中一个Task的原型设计。

166_FreeRTOS任务创建例程学习_高优先级

         三个要素:1,范围void;2,接收的参数是void *;3,函数中一个死循环。

         接下来,再看一下创建的方式:

166_FreeRTOS任务创建例程学习_优先级_02

         创建Task的方式也有几个要素,主要是传入参数。第一个是Task的函数名称;第二个是用不到的Task的名字,这个没有什么实质的作用,只是辅助调试;第三个是堆栈;第四个是参数;第五个是优先级;第六个是一个handle,用于任务处理。

         按照文档内容描述,这或许是OS里面比较难的一个接口。其实,简单分析熟悉一下之后,本质上到时也么有看到什么难点。不过,这个参数数量确实是很客观,我自己的软件设计中函数很少超过5个参数。

         接下来看一下默认运行效果:

166_FreeRTOS任务创建例程学习_高优先级_03

         顺便按照我自己的理解,看看做几个改变是否是可以出现我预期的效果。首先,我加大Task 1的执行时间,这样理论上来说Task1的打印数目会减少。代码修改如下:

166_FreeRTOS任务创建例程学习_高优先级_04

执行效果如下:

         166_FreeRTOS任务创建例程学习_优先级_05

         从执行结果看,达到了预期的效果。之后,我再改一下优先级试一下看。我把Task 1的时间加到很大,同时让它拥有更高优先级。理论上说的话,可能会出现打印Task1之后,Task2的出现会等待一会儿的情况。

代码修改:

166_FreeRTOS任务创建例程学习_原型设计_06

166_FreeRTOS任务创建例程学习_优先级_07

执行效果:

166_FreeRTOS任务创建例程学习_原型设计_08

         从执行效果看,似乎task 1占用了全部的CPU资源,一直是Task 1在打印。对换优先级,可以看到最终Task2一直打印。这里,有些概念还是不好区分,尤其是关于调度的说明,不过从这个效果上,至少可以看出优先级的作用了。