这是官方的第5个例程,这个例程以及相应的讲解还是给了我一些提示让我学到了一些东西的。

         在详细进行这个学习教程的学习之前,我自己凭感觉用了一阵子FreeRTOS,我想实现一个周期性的任务调度,于是使用了vTaskDelay的接口做了一个实现。结果测试下来,印象中大约是每47次就会出现一次偏差。一直没弄明白什么原因,后来直接放弃采用了中断。或许,这个可以解决我当时遇到的问题吧!

         看一下这个代码:

170_精准的周期性任务调度_死循环

         代码中,之前熟悉的vTaskDelay被vTaskDelayUntil代替。这里还涉及到一个接口xTaskGetTickCount,这个应该是获取当前系统Tick数目的一个接口。从注释可以看出,上一次的Tick只有一次初始化。其实,这里也算是澄清了一个问题点:Task的初始化应该是只会执行一次,之后调度器的作用只是决定死循环中的内容是否有实质性的执行。或许,这也是 RTOS实现的一个思想或者技巧?

         看一下软件的执行效果,为了方便看出运行效果,代码中的延时被我改掉了:

170_精准的周期性任务调度_任务调度_02

         运行效果是有了,之前我电脑上的实际运行速度与理论上的速度有一个2倍关系的问题还是存在。