当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. Mysql锁原理浅谈

    锁类型/引擎 行锁 表锁 页锁 MyISAM 有 InnoDB 有 有 BDB(被InnoDB取代) 有 有 锁的分类 表锁:开销小,加锁快,不会死锁,粒度大,冲突率高,并发低. 行锁:开销大,加锁慢 ...

  2. Python 练习:简单的购物车

    salary = int(input("Please input your salary: ")) msg = ''' 1. iphone6s 5800 2. mac book 9 ...

  3. 2018-04-21 搭建Python官方文档翻译环境

    参考PEP 545 -- Python Documentation Translations fork的编译脚本: nobodxbodon/docsbuild-scripts, 添加了zh语言标签, ...

  4. 【代码笔记】Web-HTML-简介

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  5. Linux环境下运行简单java程序

    一.安装java 1.下载jdk8 登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213315 ...

  6. 我的Java之旅 第七课 JAVA WEB 会话管理

    1.隐藏域       隐藏域其实不是Servlet/JSP的会话管理机制的内容,但它能实现简单的页面状态记录的效果. 2.Cookie    Cookie类    setMaxAge() 设置有效期 ...

  7. selenium win7+selenium2.0+python环境搭建

    win7+selenium2.0+python环境搭建 by:授客 QQ:1033553122 步骤1:下载python 担心最新版的支持不太好,这里我下载的是python 2.7(selenium之 ...

  8. Chrome Inspect调试stetho出现空白的解决方法

    stetho可以使用chrome调试webview,有网友反映国内不行,亲测了一下是有解决方法的: Chrome://inspect 打开后会发现stetho的页面: 点击inspect,如果没有Fa ...

  9. Android事件总线(四)源码解析otto

    前言 上一篇文章中讲到了otto的用法,这一篇我们来讲一下otto的源码.可能有人觉得otto过时了,但是通过源码我们学习的是高手设计otto时的设计理念,这种设计理念是不过时的. otto各个类的作 ...

  10. 基于Jmeter和Testlink的自动化测试框架研究与实施

    关于测试框架搭建的详细过程,会在另一篇文章中详细介绍:http://www.cnblogs.com/leeboke/p/6145977.html 摘 要 目前基于Jmeter的接口自动化测试框架,大多 ...