任务管理

1. 单任务系统

      裸机编程主要是采用超级循环(super-loops)系统,又称前后台系统。应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看做后台行为,中断服务程序处理异步事件,这部分可以看做是前台行为。后台也可以叫做任务级,前台也叫作中断级。

前后台系统的编程思路主要有以下两种方式:

      1. 查询方式对于一些简单的应用,处理器可以查询数据或者消息是否就绪,就绪后进行处理,然后再等待,如此循环下去。对于简单的任务,这种方式简单易处理。但大多数情况下,需要处理多个口数据或者消息,那就需要多次处理。用查询方式处理简单的应用,效果比较好但是随着工程的复杂,采用查询方式实现的工程就变的很难维护,同时,由于无法定义查询任务的优先级,这种查询方式会使得重要的接口消息得不到及时响应。比如程序一直在等待一个非紧急消息就绪,如果这个消息后面还有一个紧急的消息需要处理,那么就会使得紧急消息长时间得不到执行。


2. 中断方式
对于查询方式无法有效执行紧急任务的情况,采用中断方式就有效的解决了这个问题

采用中断和查询结合的方式可以解决大部分裸机应用,但随着工程的复杂,
裸机方式的缺点就暴露出来了
 必须在中断(ISR)内处理关键运算:
 ISR 函数变得非常复杂,并且需要很长执行时间。
 ISR 嵌套可能产生不可预测的执行时间和堆栈需求。
 超级循环和 ISR 之间的数据交换是通过全局共享变量进行的:
 应用程序的程序员必须确保数据一致性。
 超级循环可以与系统计时器轻松同步,但如果系统需要多种不同的周期时间,则会很难实现。
 超过超级循环周期的耗时函数需要做拆分。
 增加软件开销,应用程序难以理解。
 超级循环使得应用程序变得非常复杂,因此难以扩展:
 一个简单的更改就可能产生不可预测的副作用,对这种副作用进行分析非常耗时。
 超级循环 概念的这些缺点可以通过使用实时操作系统 (RTOS) 来解决。

2. 多任务系统


###1. 多任务系统或者说 RTOS 的实现,重点就在这个调度器上,而调度器的作用就是使用相关的调度算法来决定当前需要执行的任务。如上图所画的那样,创建了任务并完成 OS 初始化后,就可以通过调度器来决定任务 A,任务 B 和任务 C 的运行,从而实现多任务系统。另外需要初学者注意的是,这里所说的多任务系统同一时刻只能有一个任务可以运行,只是通过调度器的决策,看起来像所有任务同时运行一样。为了更好的说明这个问题,再举一个详细的运行例子,运行条件如下:
 使用抢占式调度器。
 1 个空闲任务,优先级最低。
 2 个应用任务,一个高优先级和一个低优先级,优先级都比空闲任务优先级高。
 中断服务程序,含 USB 中断,串口中断和系统滴答定时器中断。


###2. 多任务运行过程详解
(1) 启动 RTOS,首先执行高优先级任务。
(2) 高优先级任务等待事件标志( os_evt_wait_and )被挂起,低优先级任务得到执行。
(3) 低优先级任务执行的过程中产生 USB 中断,进入 USB 中断服务程序。
(4) 退出 USB 中断复位程序,回到低优先级任务继续执行。
(5) 低优先级任务执行过程中产生串口接收中断,进入串口接收中断服务程序。
(6) 退出串口接收中断复位程序,并发送事件标志设置消息( isr_evt_set ),被挂起的高优先级任务就会重新进入就绪状态,这个时候高优先级任务和低优先级任务都在就绪态,基于优先级的调度器就会让高优先级的任务先执行,此时就会进入高优先级任务。
(7) 高优先级任务由于等待事件标志( os_evt_wait_and )会再次被挂起,低优先级任务开始继续执行。
(8) 低优先级任务调用函数 os_dly_ wait,低优先级任务被挂起,从而空闲任务得到执行。
(9) 空闲任务执行期间发生滴答定时器中断,进入滴答定时器中断服务程序。
(10) 退出滴答定时器中断,由于低优先级任务延时时间到,低优先级任务继续执行。
(11) 低优先级任务再次调用延迟函数 os_dly_ wait,低优先级任务被挂起,从而切换到空闲任务。空闲任务得到执行。

###3. RTX 就是一款支持多任务运行的实时操作系统,具有时间片,抢占式和合作式三种调度方法
 任务调度 - 任务在需要时进行调用,从而确保了更好的程序执行和事件响应。
 多任务 - 任务调度会产生同时执行多个任务的效果。
 确定性的行为 - 在定义的时间内处理事件和中断。
 更短的 ISR - 实现更加确定的中断行为。
 任务间通信 - 管理多个任务之间的数据、内存和硬件资源共享。
 定义的堆栈使用 - 每个任务分配一个堆栈空间,从而实现可预测的内存使用。
 系统管理 - 可以专注于应用程序开发而不是资源管理。

嵌入式 RTOS多任务操作系统简介相关推荐

  1. 嵌入式操作系统和RTOS(实时操作系统)介绍。

    目录 嵌入式操作系统 RTOS(实时操作系统) 实时操作系统: 什么是嵌入式操作系统 一μClinux 二μC/OS-II 三eCos 四 FreeRTOS 五 mbed OS 六 RTX 七 VxW ...

  2. 详解目前主流的嵌入式操作系统(RTOS)操作系统

    满足实时控制要求的嵌入式操作系统(RTOS)操作系统,以下介绍14种主流的RTOS,分别为μClinux.μC/OS-II.eCos.FreeRTOS.mbed OS.RTX.Vxworks.QNX. ...

  3. 几种嵌入式RTOS的分析与比较

    几种嵌入式RTOS的分析与比较 http://tech.ddvip.com   2008年07月10日    社区交流 Sailor_forever  sailing_9806@163.com 整理  ...

  4. 各种操作系统简介和功能分析

    Windows 开发商 Microsoft Windows98/me Windows2000/XP Windows Server2003 Windows Vista Windows98/me是基于MS ...

  5. 14种主流的RTOS 单片机操作系统~来学!

    已剪辑自: https://mp.weixin.qq.com/s/YQGaBlluBWFbk01K5qCu_A 单片机编程时,我们都知道有两种基本操作:裸奔和操作系统.所谓裸奔,就是一个大循环往复执行 ...

  6. 【Linux操作系统】1. Linux操作系统简介、安装

    前言 本系列是Linux操作系统的一些知识以及实践内容,Linux操作系统作为开发最常使用的操作系统,是必备的一门求职.提升技术.本文先介绍Linux操作系统,并安装一个Linux操作系统. Linu ...

  7. 近两年国内外主流物联网操作系统简介

    一.国外 Android Things 2015 年的谷歌 I/O 全球开发者大会上,谷歌对外宣布将会开发一个面向物联网设备的安卓操作系统,内部代号为"Brillo",Brillo ...

  8. RTOS实时操作系统

    RTOS实时操作系统 RTOS的起源与目的 RTX实时操作系统模块 任务创建.消灭 任务调度 调度方式---抢占式.时间片.合作式 优先级修改 任务间同步 事件标志组 信号量 互斥信号量 进程锁 任务 ...

  9. IT知识架构和操作系统简介1

    一.IT知识架构 数据存储:磁盘--|--SAN.NAS.DAS(专门将数据存储于磁盘阵列) |--分布式存储架构(HDFS Hadoop分布式文件系统)--集群(应用) + 系统:Linux + 算 ...

最新文章

  1. 如何提高UI自动化测试的质量
  2. java清除cookie
  3. Maven项目错误解决小结
  4. 测绘地理信息标准(国家、行业、地方)大全来了:测绘地理信息标准化服务平台
  5. 408计算机网络考研试题,2021考研计算机(408)试题及解析——计算机网络
  6. 【算法】剑指 Offer 47. 礼物的最大价值
  7. 【面向对象设计原则】之依赖倒置原则(DIP)
  8. nth-of-type和nth-child的区别
  9. php 工业通讯录,PHP 制作通讯录(六)
  10. ubuntu安装matlab2016b
  11. php实现简易聊天室
  12. 我的故事登上了Android开发者的官网
  13. 阿里云海外云服务器5折起,新老用户均可选购(免备案)
  14. 如何区别同质化,实现差异化?
  15. 关于语音特征提取(MFCC)的matlab相关函数
  16. 软件测试入门之软件测试的概念与过程(精辟内容)
  17. qss样式表之QLable
  18. DS博客大作业--树 (陈梓灿组)
  19. Android studio 集成Unity
  20. 图解红黑树及Java进行红黑二叉树遍历的方法

热门文章

  1. 《棒球殿堂》:棒球联盟LEAGUE·北海道火腿斗士
  2. 在Debian下安装输入法的过程
  3. 电子元件知识汇总4-采购
  4. 安装sublime成功经验linux-ubuntu
  5. html table的边框线怎么变圆角_css怎么让表格四角变圆角?
  6. sql查询数据库注释(表及表注释,字段及字段注释)
  7. CEPH分布式存储部署
  8. excel如何快速将表格转换为英文?
  9. 拼夕夕事件反思,底层逆袭,靠拼命加班行吗
  10. Mysql进阶学习(四)分组函数与分组查询