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 打印页面怎么实现?

    2017-11-10 react 打印页面怎么实现?

  2. leetcode1186 Maximum Subarray Sum with One Deletion

    思路: 最大子段和的变体,前后两个方向分别扫一遍即可. 实现: class Solution { public: int maximumSum(vector<int>& arr) ...

  3. JPEG与JPEG2000

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

  4. CentOS 7 安装wordpress

    1.安装php 要安装php 7,必须使用下面的命令在Centos7系统上安装并启用epel和remi存储库. 输入一下代码, yum install http://rpms.remirepo.net ...

  5. vue-cli2和vue-cli3同时存在

    https://blog.csdn.net/Jioho_chen/article/details/90455778 win下 vue-cli2 和 vue-cli3 并存,一起使用开局一张图,内容慢慢 ...

  6. html5 table的表头固定的HTML代码

    table的表头固定的HTML代码 <!DOCTYPE html> <html> <head lang="en"> <meta chars ...

  7. [转帖]谷歌TF2.0凌晨发布!“改变一切,力压PyTorch”

    谷歌TF2.0凌晨发布!“改变一切,力压PyTorch” https://news.cnblogs.com/n/641707/ 投递人 itwriter 发布于 2019-10-01 12:38 评论 ...

  8. js — 字符串

    目录 1. 拼接字符串 2. 获取字符的方法 3. 字符串操作方法(切片) 4. 字符串位置方法 - 索引 5. trim()方法 6. 字符串大小写转换方法 字符串 typeof 用于校验当前变量的 ...

  9. WUSTOJ 1279: Wallace and His Pet(Java)

    1279: Wallace and His Pet 题目   给出一句话(英文),单词总数不超过1000,每个单词不超过10个字符,一句话只有一个唯一的字符"."(句点).将这句话 ...

  10. flask返回自定义的Response

    from json import dumps from flask import Response from flask_api import status from protocol.errors_ ...