173_FreeRTOS修改任务优先级

         先看一下官方的例子设计。

173_FreeRTOS修改任务优先级

         创建了两个优先级的任务,vTask1和vTask2,其中vTask1的优先级要高一点。

173_FreeRTOS修改任务优先级

173_FreeRTOS修改任务优先级

         两个任务都是阻塞性任务,其中,Task1的优先级初始化是2,Task2的优先级是1。如果没有优先级修改,Task应该会饿死。现在,Task1中尝试把Task2的优先级提升到比自己高,变成3。之后,Task2会执行,如果没有优先级修改Task1会被饿死。然而,Task2中把自己的优先级降低了两级,变成了1。因此,执行应该能够看到两个任务交替执行。

173_FreeRTOS修改任务优先级

         从上面的结果看,两个交替的次数一致。那么这个任务调度是在优先级修改的同时被触发了吗?如何测试下呢?应该可以进行优先级数值的打印,如果优先级调整不会立即触发任务调度,可能会出现多次提升或者降低Task优先级的情况。

         代码修改:

173_FreeRTOS修改任务优先级

173_FreeRTOS修改任务优先级

         运行结果:

173_FreeRTOS修改任务优先级

         从上面看,应该是设置优先级的同时触发了调度。

         接下来测试一下,自己修改自己优先级的时候是否可以用handle来处理?看到这部分文档中以及代码中都没有用到。测试一下:

         代码修改如下:

173_FreeRTOS修改任务优先级

         运行结果:

173_FreeRTOS修改任务优先级

         看上去还是可以运行的。

         再次测试,看看修改优先级的时候是否可以赋值为原来的优先级。代码修改如下:

173_FreeRTOS修改任务优先级

         运行效果:

173_FreeRTOS修改任务优先级

         并没有出现什么错误,可以正常运行。