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. MFC BASE64加解密 算法

    unsigned char * base64 = (unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ...

  2. 【C#设计模式3】工厂方法模式

    一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是——简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以 ...

  3. 记录一下我的git连接不上GitHub问题

    1.日常操作,提交代码,报错误下: $ git clone git@github.com:hanchao5272/myreflect.git Cloning into 'myreflect'... s ...

  4. pip3 install pyinstaller 报错了的处理方法

    http://www.pyinstaller.org/downloads.html 下载压缩包 解压到本地后,在目录处cmd 执行命令 python setup.py install 然后执行pip ...

  5. python选课系统demo的小练习

    #简化选课系统代码:先登陆,然后判断身份并实例化,根据身份对应的类,让用户选择 class Manager: operate_dict=[ ('创造学生账号',"creat_student& ...

  6. Object Detection in 20 Years: A Survey【持续更新中】

    原文:https://www.cnblogs.com/zhaojunjie/p/10886099.html 论文链接:https://arxiv.org/pdf/1905.05055.pdf 1. 引 ...

  7. QT信号槽连接

    一:信号槽是什么? Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就 ...

  8. python 字典dict - python基础入门(15)

    前面的课程讲解了字符串str/列表list/元组tuple,还有最后一种比较重要的数据类型也需要介绍介绍,那就是python字典,俗称:dict. python中的字典可与字符串/列表/元组不同,因为 ...

  9. js 读取文本文件,日志内容

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. windows版mysql添加远程访问

    use mysql; ##然后查看下当前连接允许情况 select host, user, authentication_string, plugin from user; ##依次执行 CREATE ...