RTOS系统的核心就是任务管理;

任务的特性

在RTOS中每个任务都有自己的运行环境,不依赖于系统中其他的任务或者调度器,任何一个时间点只能有一个任务运行,具体运行哪个任务是由任务调度器来决定的,而任务调度器的职责就是确保当一个任务开始执行的时候其上下文环境,比如寄存器的值、堆栈中的内容等等,要和任务上次退出时相同,这样当任务再次执行的时候就可以从堆栈中取出上下文环境,任务恢复运行;

所以任务的特性总结如下:

  • 简单且没有使用限制;
  • 支持抢占、支持任务优先级;
  • 每个任务都拥有独立的堆栈,从而导致RAM消耗增大;
  • 如果使用抢占,则必须认真考虑可重入的问题;

任务的状态

任务在任一时刻总是处于下面几个状态中的某一个:

  • 运行态

    一个正在运行的任务就处于运行态,如果使用的是单核处理器的话,那么在任一时刻只有一个任务处于运行态;

  • 就绪态

    处于就绪态的任务就是没有被阻塞或者挂起,而可以运行的任务,之所以处于就绪态是因为有一个同优先级或者更高优先级的任务正在运行;

  • 阻塞态

    任务在等待队列、信号量、事件组、通知、互斥信号量或者调用了vTaskDelay()函数等等这类情况下就会进入阻塞态;任务进入阻塞态会有一个超时时间,当超过了这个超时时间任务就会退出阻塞态,即使所等待的信号或者事件还未到;

  • 挂起态

    任务进入挂起态之后不能被调度器调用而进入运行态,挂起态类似于阻塞态,但是不同之处是没有超时时间;

任务优先级

在FreeRTOS中,任务优先级数字越低表示任务优先级越低,0代表最低的优先级,一般是空闲任务的优先级,configMAX_PRIORITIES-1的优先级最高;

任务调度器的作用就是确保就绪任务中最高优先级的任务始终能过够优先获取到处理器的使用权;

当宏configUSE_TIME_SLICING定义为1的时候(默认情况下,该宏在文件FreeRTOS.h中已经定义为1),多个任务可以共用一个优先级,数量不限,此时处于就绪态的优先级相同的任务就会使用时间片轮转调度器获取运行时间;

FreeRTOS任务基础概念的更多相关文章

  1. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  2. TCP/IP基础概念及通信过程举例

    TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...

  3. Jmeter基础之---jmeter基础概念

    Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...

  4. 快速入门系列--WCF--01基础概念

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  5. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

  6. JavaBean 基础概念、使用实例及代码分析

    JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...

  7. RabbitMQ基础概念详细介绍

    http://blog.csdn.net/column/details/rabbitmq.html 转至:http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多 ...

  8. linux设备驱动归纳总结(二):模块的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59415.html linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10 ...

  9. linux设备驱动归纳总结(一)内核的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxx ...

随机推荐

  1. react用redux 做的todolist

    ### 1. 创建项目  create - react - app  项目名(shop) ### 2. 进入项目,下载redux  cnpm install redux  --save  ### 3. ...

  2. vue-cli2.0项目的搭建

    1.第一步:安装vue-cli 命令行输入cmd或按住shift鼠标右键打开powershell 输入命令 npm install --global vue-cli 按enter键 2.第二步:创建项 ...

  3. JPEG与JPEG2000

    JPEG与JPEG2000 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 背景介绍 JPEG 全名为 Joint Photographic Experts ...

  4. 彻底理解js中this的指向,不必硬背(转)

    转自: http://www.h5cn.com/js/jishu/2016/0226/18248.html 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定th ...

  5. 综合练习2 设置访问权限,Easy-IP访问外网,内外网访问

    实验拓扑图: 实验要求: 1.pc.路由.交换基本配置,vlan间路由互通. 2.vlan20.vlan30可以访问FTP,VLAN10不允许访问FTP. 3.AR1通过easy-ip方式实现私网地址 ...

  6. 机器学习_第一节_numpy

    今天学了机器学习第一节, 希望能够坚持下去,其实不在乎课程是什么?关键要坚持下去 今天主要学了对矩阵的一些操作, 用的库是numpy 开始从头到尾捋一遍, 作者说的很有道理,学计算机,动手能力要强,所 ...

  7. python 模块import(26)

    一.模块简介 python开发中,每一个.py文件都可以看作是一个模块,模块内部的函数或者方法可以被其他模块调用,至于函数或者方法是具体如何实现的,调用者不需要关心. 假如项目中既含有UI也有逻辑代码 ...

  8. mysql支持emoji表情符存储

    一.教你如何让数据库支持emoji表情符存储 解决方式: 更换字符集utf8-->utf8mb4 问题描述: 前台应用抓取微博信息,每天总有几条数据插入不成功.应用日志显示: java.sql. ...

  9. [转帖]linux下的find文件查找命令与grep文件内容查找命令

    linux下的find文件查找命令与grep文件内容查找命令 https://www.cnblogs.com/shileima/p/8431393.html 在使用linux时,经常需要进行文件查找. ...

  10. pandas之分组计算笔记

    分组计算三部曲:拆分-->应用-->合并 分组:就是按照行或列把相同索引的部分分到一起 分组的关键词为groupby,分组后我们就可以对每组数据进行同一操作,返回的是每组数据分别计算后的结 ...