当FreeRTOS启动任务调度器以后,任务调度器会在心跳中断函数中确定下一个要运行的任务,如果任务调度器仅仅依靠任务优先级来判断该运行哪个任务,这样会造成低优先级的任务根本没法运行,因为FreeRTOS的任务都是循环执行的,这样就失去了优先级的意义。为了统筹安排任务的执行,FreeRTOS增加了任务的非运行态:

  ready:当内核正在执行最高优先级的任务的时候,其他已经做好准备可以随时运行的任务的状态;

  阻塞态:就是任务在等待某个同步事件的发生(比如某个信号量,互斥量等等),或者任务在等待定时器的触发,只有在驱动事件发生或者定时器触发的情况下,这个任务才有资格转换成ready状态,如果没有转换成ready状态,即使优先级再高,调度器也不会调用这个任务的,如果阻塞态等待的同步事件在规定的事件内没有发生,那么就触发定时器;

  挂起状态:任务调度器根本就不会考虑挂起状态的任务,更不用说执行挂起状态的任务了;

阻塞态应用很好的一个例子就是vTaskDelay(time_period/portTICK_RATE_MS); 这个函数会一直处在阻塞态,可以取代for循环的轮询延时函数,这个for循环延时会增加CPU的负担又不干任何有意义的事情,所以用vTaskDelay()来做延时函数更合适,在vTaskDelay()中,参数表达式的分子部分time_period是一心跳单位为计数单位的时间值,分母部分是每毫秒对应的心跳数值,这样正好可以得到延时的毫秒值;

还有一个阻塞态延时函数vTaskDelayUnil(pxPreciousWakeTime, xTimeIncrement),这个函数相比vTaskDelay()来讲更精确,该函数可以保证固定的执行频率,第一参数的意思是被唤醒的时间,第二个参数的意思是从阻塞态切入ready状态的时间;

正是有了费运行态(阻塞态和挂起状态)的存在,再配合任务优先级,才让RTOS真正的可以执行多任务;

FreeRTOS的任务非运行态的更多相关文章

  1. Unity非运行模式下实现动画播放/回退工具

    实现效果 核心功能 支持选定模型(带Animator)在非运行模式下,播放/暂停/停止动作. 支持动作单帧前进,单帧回退(帧时间默认0.05f,可以代码设置). 支持滚动条拖拽,将动作调整到指定时间. ...

  2. Java异常处理-----非运行时异常(受检异常)

    非运行时异常(受检异常) 如果出现了非运行时异常必须进行处理throw或者try{}catch(){}处理,否则编译器报错. 1:IOException 使用要导入包import java.io.IO ...

  3. cmd非运行完再保存,结果显示&保存同时进行

    #coding:utf-8 """ fps信息获取到文件 """ import sys import subprocess class Lo ...

  4. 在Amazon FreeRTOS V10中使用运行时统计信息

    在MCU on Eclipse网站上看到Erich Styger在8月2日发的博文,一篇关于在Amazon FreeRTOS V10中使用运行时统计信息的文章,本人觉得很有启发,特将其翻译过来以备参考 ...

  5. java 运行时异常与非运行时异常理解

    参考:https://blog.csdn.net/lan12334321234/article/details/70049446 所谓的异常就是阻止当前程序或方法继续执行的问题 java异常分为两种: ...

  6. Java运行时异常和非运行时异常

    1.Java异常机制 Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类.Java中的异常分为两大类:错误Error和异常Exception,Java ...

  7. 【译文】利用STAN做贝叶斯回归分析:Part 2 非正态回归

    [译文]利用STAN做贝叶斯回归分析:Part 2 非正态回归 作者 Lionel Hertzogn 前一篇文章已经介绍了怎样在R中调用STAN对正态数据进行贝叶斯回归.本文则将利用三个样例来演示怎样 ...

  8. Java检查异常、非检查异常、运行时异常、非运行时异常的区别

    Java把所有的非正常情况分为两种:异常(Exception)和错误(Error),它们都继承Throwable父类. Java的异常(Exception和Error)分为检查异常和非检查的异常. 其 ...

  9. Java检查异常和非检查异常,运行时异常和非运行时异常的区别

    通常,Java的异常(包括Exception和Error)分为检查异常(checked exceptions)和非检查的异常(unchecked exceptions).其中根据Exception异常 ...

随机推荐

  1. elasticsearch安装之各种坑

    我用的是centos6.5,安装elasticsearch5.2.0 首先不说了,安装JDK1.8,下载elasticsearch5.2.0 https://www.elastic.co/downlo ...

  2. JavaScript--水平幻灯片

    // 列表布局,图片左浮动,外侧容器设置overflow:hidden; // 组合使用构造函数模式(对象不共享的数据)和原型模式(对象共享的数据) <!DOCTYPE html> < ...

  3. 【机器学习】激活函数(Activation Function)

    https://blog.csdn.net/ChenVast/article/details/81382795 激活函数是模型整个结构中的非线性扭曲力 神经网络的每层都会有一个激活函数 1.逻辑函数( ...

  4. android 保存图片,及将图片更新到图库

    **保存图片 public static File saveImage(Bitmap bmp) { File appDir = new File(Environment.getExternalStor ...

  5. MVC与单元测试实践之健身网站(四)-动作管理

    网站后台负责进行动作的管理,包括动作名称.介绍.训练要点.配图等内容,以便前台能够使用这些内容.在上一篇< Fit项目图片上传和云存储的调通>中已经准备好了这里涉及到的主要技术难点,现在就 ...

  6. Javascript 高级程序设计--总结【二】

    **********************  Chapter 6  ********************** 属性: 数据属性: Configurable: 能否通过delete 删除属性,默认 ...

  7. SQL Server ltrim(rtrim()) 去不掉空格

    原因:中间存在回车符或者换行符,所以要先将此符号替换掉: LTRIM(RTRIM(REPLACE(REPLACE( A,char(13),''),char(10),'') )) LTRIM(A) -- ...

  8. sysbench对MySQL的压测,使用sysbench压测磁盘io

    QPS - query per secondTPS - transaction per second 不是特别关注,每个业务场景中事务标准是不一样的 Ⅰ.sysbench测试框架 Ⅱ.常用测试脚本 [ ...

  9. 常用css字体英文写法

    font-family: 'Microsoft Yahei',sans-serif; 宋体:SimSun 黑体:SimHei

  10. pip更新及Requirement already up-to-date解决方法

    pip更新及Requirement already up-to-date解决方法 文:铁乐与猫 2018-9-11 更新命令 将pip更新到最新版本 python -m pip install --u ...