影者东升 发表于 2021-7-9 09:33:01

169_利用阻塞状态创建延时

  这个总结基于官方文档附加的第4个例子,阻塞状态通过调用系统接口vTaskDelay实现。这个接口会把任务切换到阻塞状态维持一定的系统tick周期。
  代码如下:

  98行的pdMS_TO_TICKS是一个宏,可以把以ms为单位的时间转换成系统tick数目。116行的调用,其实是把任务切换到了阻塞状态。
  运行效果:

  从运行效果可以看得出,vTaskDelay的多次重复调用似乎是不会彼此影响的。为了有一个更加直观的感觉,我把这个时间改成1s,之后看看两个Task的打印周期是否全都是1s。
  修改如下:

  实际的运行效果算下来,打印的速度似乎只有二分之一的速度。至少,在我的计算机上是这个效果。
  再次修改,我只创建了一个Task,得到了基本一致的运行效果。看起来这或许是模拟环境在不同PC平台上的行为差异。
  再回到OS的调度上,可以看得出OS创建出来的是2个优先级的不同的任务,而之前遇到的高优先级运行饿死低优先级任务的问题已经不存在了。

  
文档来源:51CTO技术博客https://blog.51cto.com/greyzhang/3014578
页: [1]
查看完整版本: 169_利用阻塞状态创建延时