171_FreeRTOS阻塞型任务与非阻塞型任务同时使用

         标题没有考虑好,只是一个翻译的问题,暂时先这么定。接触这个例子之前,我认为在FreeRTOS如果软件设计中出现非阻塞任务或许是一个设计的失败。如果有的非阻塞的任务的话,那么直应该是idle。从这个例程看,或许我理解的还是不正确。

         原始的软件,打印的速度太快不利于观察,我把代码进行了一下修改以便我能够更好的做一下效果的监控。

171_FreeRTOS阻塞型任务与非阻塞型任务同时使用_第1张图片

171_FreeRTOS阻塞型任务与非阻塞型任务同时使用_第2张图片

         值得一说的是,官方的代码中124行内中5ms的赋值也是有点歧义性的,写成了3,不知道是否是错误?或许也是有意为之。

         软件执行效果:

171_FreeRTOS阻塞型任务与非阻塞型任务同时使用_第3张图片

         这个是我调整后的一个软件执行效果。我自己做了一个数目以及时间的统计,可以看得出我之前遇到的双倍速度问题还是存在。

         这里尝试一下一个更加恶劣的条件,我把非阻塞的任务直接死循环中再加一个死循环。看看周期性的调度知否还可以执行。这种情况,应该更能够说明阻塞任务与非阻塞任务的协同。代码修改如下:

171_FreeRTOS阻塞型任务与非阻塞型任务同时使用_第4张图片

         测试效果:

171_FreeRTOS阻塞型任务与非阻塞型任务同时使用_第5张图片

         软件还是可以执行的,这里似乎可以得出一个结论:某些时候出现的死循环,或许不会对系统造成致命的影响。结合之前没有修改的测试效果则知道,一个任务执行的过程中是有可能会被中断掉的。不过,现在有一个很着急需要确认的问题是执行时间的准确性。

你可能感兴趣的:(RTOS)