【小黑嵌入式系统第十课】μC/OS-III概况——实时操作系统的特点、基本概念(内核任务中断)、与硬件的关系实现

文章目录

    • 一、为什么要学习μC/OS-III
    • 二、嵌入式操作系统的发展历史
    • 三、实时操作系统的特点
    • 四、基本概念
      • 1. 前后台系统
      • 2. 操作系统
      • 3. 实时操作系统(RTOS)
      • 4. 内核
      • 5. 任务
      • 6. 任务优先级
      • 7. 任务切换
      • 8. 调度
      • 9. 非抢占式(合作式)内核
      • 10. 抢占式(可剥夺式)内核
      • 11. 中断
      • 12. 时钟节拍
    • 五、使用嵌入式操作系统的优缺点
    • 六、嵌入式操作系统分类
    • 七、μC/OS简介
    • 八、Jean J. Labrosse的故事
    • 九、μC/OS 的几个典型应用
    • 十、µC/OS-III的特点
    • 十一、µC/OS-III的结构及其与硬件的关系
      • <center> µC/OS-III不是自由软件和免费软件,用于商业目的时须取得许可证


一、为什么要学习μC/OS-III

一. 凡从事嵌入式系统开发工作的人,必须对嵌入式操作系统有足够的了解。

二. 对于初学者,从μC/OS-III开始是个明智的选择。

  • μC/OS-III麻雀虽小,却五脏基本全(它是个微内核)。

  • 可以把操作系统抽象概念具体化。

  • 可以学习实时系统的一些编程技巧。

  • 具有很强的实用性。

  • 学习数据结构应用的好例子。


二、嵌入式操作系统的发展历史

1981年Ready System发展了世界上第1个商业嵌入式实时内核(VTRX32)包含了许多传统操作系统的特征,包括任务管理、任务间通讯、同步与相互排斥、中断支持、内存管理等功能。

随后,出现了如Integrated System Incorporation (ISI)的PSOS、IMG的VxWorks、QNX公司的QNX 等,Palm OSWinCE,嵌入式LinuxLynxμCOSNucleus,以及国内的HopenDelta OS等嵌入式操作系统。

今天RTOS已经在全球形成了一个产业。


三、实时操作系统的特点

IEEE 的实时UNIX分委会认为实时操作系统应具备以下的几点:

  • 异步的事件响应
  • 切换时间和中断延迟时间确定
  • 优先级中断和调度
  • 抢占式调度
  • 同步

总的来说实时操作系统是事件驱动的,能对来自外界的作用和信号在限定的时间范围内作出响应。它强调的是实时性可靠性灵活性,与实时应用软件相结合成为有机的整体起着核心作用,由它来管理和协调各项工作,为应用软件提供良好的运行软件环境及开发环境。

从实时系统的应用特点来看,实时操作系统可以分为两种:一般实时操作系统嵌入式实时操作系统

  • 一般实时操作系统应用于实时处理系统的上位机和实时查询系统等实时性较弱的实时系统,并且提供了开发、调试、运用一致的环境。

  • 嵌入式实时操作系统应用于实时性要求高的实时控制系统,而且应用程序的开发过程是通过交叉开发来完成的,即开发环境与运行环境是不一致的。嵌入式实时操作系统具有规模小(一般在几K~几十KB 内)、可固化使用实时性强(在毫秒或微秒数量级上)等特点 。


四、基本概念

1. 前后台系统

对基于芯片的开发来说,应用程序一般是一个无限的循环,可称为前后台系统或超循环系统。

前后台系统结构简单,很多基于微处理器的产品都采用了前后台系统设计,例如微波炉、电话机、玩具等。而在一些基于微处理器的应用中,从省电的角度出发,平时微处理器处在停机状态,所有事都靠中断服务来完成。

在这里插入图片描述


2. 操作系统

操作系统是计算机中最基本的程序。操作系统负责计算机系统中全部软硬资源的分配与回收、控制与协调等并发的活动;操作系统提供应用程序接口,使用户获得良好的工作环境;操作系统为用户扩展新的系统功能提供软件平台。

在这里插入图片描述


3. 实时操作系统(RTOS)

实时操作系统是一段在嵌入式系统启动后首先执行的背景程序,用户的应用程序是运行于RTOS之上的各个任务,RTOS根据各个任务的要求,进行资源(包括CPU、存储器、外设等)管理、消息管理、任务调度、异常处理等工作。

在RTOS支持的系统中, 每个任务均有一个优先级,RTOS根据各个任务的优先级,动态地切换各个任务,保证对实时性的要求。

实时操作系统包含实时内核,以及其它高级的服务如:文件管理、协议栈、图形用户接口(GUI)等。


4. 内核

多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通信。内核提供的最基本服务是任务切换。使用实时内核可以大大简化应用系统的设计,因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。

内核需要消耗一定的系统资源,比如2%~5%的CPU运行时间、RAM和ROM等。

内核还提供一些必不可少的系统服务,如信号量消息队列延时等。


5. 任务

一个任务,也称作一个线程,是一段简单的程序,该程序可以认为CPU完全属于该程序自己。每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和自己的栈空间。

实时应用程序的设计过程,包括如何把问题分割成多个任务,每个任务都是整个应用的某一部分。


6. 任务优先级

任务的优先级是表示任务被调度的优先程度。每个任务都具有优先级。任务越重要,赋予的优先级应越高,越容易被调度进入运行态。


7. 任务切换

当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态,即CPU寄存器中的全部内容。这些内容保存在任务的当前状态保存区,即任务自已的栈之中。入栈工作完成以后,就把下一个将要运行的任务的当前状态从其栈中重新装入CPU的寄存器,并开始下一个任务的运行。这个过程就称为任务切换。

这个过程增加了应用程序的额外负荷。CPU的内部寄存器越多,额外负荷就越重。做任务切换所需要的时间取决于CPU有多少寄存器要入栈。


8. 调度

调度是内核的主要职责之一。调度就是决定该轮到哪个任务运行了。多数实时内核是基于优先级调度法的。每个任务根据其重要程序的不同被赋予一定的优先级。基于优先级的调度法指CPU总是让处在就绪态的优先级最高的任务先运行。

然而究竟何时让高优先级任务掌握CPU的使用权,有两种不同的情况,这要看用的是什么类型的内核,是非抢占式的还是抢占式的内核。


9. 非抢占式(合作式)内核

非抢占式内核要求每个任务自我放弃CPU 的所有权。非抢占式调度法也称作合作型多任务,各个任务彼此合作共享一个CPU。

异步事件还是由中断服务来处理。中断服务可以使一个高优先级的任务由挂起(Pending,或译为“等待” )状态变为就绪状态。但中断服务以后CPU控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。


10. 抢占式(可剥夺式)内核

当系统响应时间很重要时,要使用抢占式内核。因此绝大多数商业上销售的实时内核都是抢占式内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪状态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。

如果是中断服务程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务将被挂起,优先级高的那个任务开始运行。


11. 中断

中断是一种硬件机制,用于通知CPU有个异步事件发生了。中断一旦被识别,CPU保存部分(或全部)上下文即部分或全部寄存器的值,跳转到专门的子程序,称为中断服务程序(ISR)。中断服务程序做事件处理,处理完成后,程序回到:

  1. 在前后台系统中,程序回到后台程序;
  2. 对非抢占式内核而言,程序回到被中断了的任务;
  3. 对抢占式内核而言,让进入就绪态的优先级最高的任务开始运行。

在这里插入图片描述


12. 时钟节拍

时钟节拍是特定的周期性中断。这个中断可以看作是系统心脏的脉动。中断之间的时间间隔取决于不同应用,一般在10ms到200ms之间。时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务在等待事件发生时,提供等待超时的依据。

时钟节拍率越快,系统的额外开销就越大。


五、使用嵌入式操作系统的优缺点

  • 优点

    • 使程序的设计和扩展变得容易,大大提高了开发效率。
    • 充分发挥32位CPU多任务的潜力,实现多任务设计,能够充分利用硬件资源和实现资源共享。
    • 实时性和健壮性能够得到更好的保证。
  • 缺点

    • 嵌入式操作系统占用ROM/RAM等额外开销,5~10%的CPU额外负荷。

六、嵌入式操作系统分类

  • 按收费模式划分
    • 商用型:
      Vxworks, Nucleus, PlamOS, Symbian, WinCE, QNX, pSOS, VRTX, Lynx OS, Hopen, Delta OS
    • 免费型:
      Linux, μCLinux, μC/OS-III(非商用时), eCos, uITRON
  • 按实时性划分
    • 硬实时:
      Vxworks、μC/OS-III
      软实时
      WinCE, RTLinux
    • 无实时:
      Embedded Linux

七、μC/OS简介

  • μC/OS—Micro Controller OS

  • 美国人Jean Labrosse 1992年完成,已应用于众多产品中。

  • 应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等。

  • 1998年μC/OS-II、2009年μC/OS-III

  • 满足航空电子、工业控制、医疗等市场的针对可靠性/安全性的认证标准。

  • 是一个源码公开、可移植、可裁减、可固化、占用资源少、抢占式的实时多任务操作系统内核。其绝大部分源码采用ANSI C编写,可移植性好。高校教学可免费使用。


八、Jean J. Labrosse的故事

  • 80年代末,我设计了一个基于Intel 80C188的产品,需要一个实时内核。
  • 使用一个知名的内核太贵了,廉价的内核B(当时大约1000美元以下)让我总给该厂商打电话求援。该厂商声称内核B是用C语言写的,可我还得用汇编语言初始化程序的每个对象,实在是烦透了,产品的开发也耽误了。
  • 后来我得知我是该厂商的第一个客户

九、μC/OS 的几个典型应用

  • NSA2010便携式电话,在日本大约有15000台投入市场。使用μC/OS实时操作系统。

在这里插入图片描述

  • CYCLONE移动电话,Hitachi H8S/2318k微程序控制器,256K闪存和8K Ram, μC/OS 实时操作系统。

在这里插入图片描述

选择μC/OS的原因
INFEA R&D的职员从1996年以来开始应用Micriμm实时操作系统。通过比较,还没有发现比μC/OS更好的实时操作系统。


十、µC/OS-III的特点

  • 源代码开放

  • 便捷的应用程序编程接口(API)

  • 抢占式多任务管理

  • 同优先级任务的时间片轮转调度

  • 极短的关中断时间

  • 确定性

  • 可裁剪

  • 可移植

  • 可固化

  • 可动态配置

  • 任务数目不受限制

  • 内核对象数目不受限制

  • 丰富的系统服务

  • 互斥型信号量

  • 软件定时器

  • 同时等待多个内核对象

  • 直接向任务发信号、消息

  • 任务寄存器

  • 出错检验

  • 内置性能测试

  • 易于优化

  • 防止死锁

  • 内置的内核察觉式调试


十一、µC/OS-III的结构及其与硬件的关系

在这里插入图片描述

按照每个模块的标记顺序,对内核每个模块的功能进行说明:

(1)应用程序代码。为了方便起见,将其简称为APP.C和APP.H,然而,一个应用可包含任意数量的文件,这些文件并不一定叫APP.*。通常在应用程序代码中可找到主函数main()。

(2)半导体制造商通常以源代码的形式提供库函数,用于访问他们生产的CPU或者MCU的外设。这些库非常的有用。

(3)板级支持包(Board Support Package,BSP)是操作系统与目标板外设的交互代码。比如,这些代码可用于打开或者关闭LED灯、继电器,读开关状态、读温度传感器等。

(4)这是μC/OS-III中与CPU无关的代码,这部分代码是用高度可移植的ANSI C编写的。

(5)这部分μC/OS-III代码需要根据特定的CPU架构进行修改,该过程称为移植(porting)。

(6)Micrium公司将CPU相关功能代码封装起来。这些文件定义了禁止和使能中断的函数,与CPU和使用的编译器有关的CPU_???数据类型,和一些其它的函数。

(7)μC/LIB是一系列提供通用函数的源文件,比如内存复制、字符串和ASCII码的相关函数。其中一部分函数用来代替编译器所提供的stdlib库里的函数。这些函数代码的提供确保了应用程序之间,特别是编译器之间的可移植性。μC/OS-III并不使用这些文件,但μC/CPU会用到。

(8)这部分是μC/OS-III的配置文件。OS_CFG.H配置μC/OS-III的功能;OS_CFG_APP.H配置μC/OS-III特定变量或数据结构的大小,比如:空闲任务的栈大小,时钟节拍的频率、消息缓冲池的大小等; CPU_CFG.H用来配置应用程序编程人员可用的μC/CPU功能;LIB _CFG.H用来配置μC/LIB选项。



µC/OS-III不是自由软件和免费软件,用于商业目的时须取得许可证



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/180318.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻量级web开发框架:Flask本地部署及实现公网访问界面

轻量级web开发框架&#xff1a;Flask本地部署及实现公网访问界面 文章目录 轻量级web开发框架&#xff1a;Flask本地部署及实现公网访问界面前言1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 前言 本篇文章讲解如何…

CI/CD 构建中能保护好 SSHKEY吗?

目录 背景 方案 编码存储 逐行存储 合并存储 打马赛克 结论 背景 使用极狐GitLab CI/CD&#xff0c;在部署方面&#xff0c;主要有两种方式&#xff1a; 部署到K8S集群 Push模式&#xff1a;流水线通过kubectl执行命令部署&#xff0c;这需要把K8S的权限给流水线&#xf…

GoWeb学习-第二天

文章目录 从零开始学Go web——第二天一、安装Go语言二、建立web目录2.1 创建GO语言包目录2.2 创建Go web文件 三、编译并运行Go web应用3.1 编译并运行3.2 查看结果 从零开始学Go web——第二天 ​ 第一天我们了解了与web息息相关的HTTP协议&#xff0c;聊了聊Go与web的关系等…

LeetCode Hot100 42.接雨水

题目&#xff1a; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 方法一&#xff08;相向双指针&#xff09;&#xff1a;竖着计算面积 代码&#xff1a; class Solution {public int trap(int[] he…

无分类编址 CIDR

在域名系统出现之后的第一个十年里&#xff0c;基于分类网络进行地址分配和路由IP数据包的设计就已明显显得可扩充性不足&#xff08;参见RFC 1517&#xff09;。为了解决这个问题&#xff0c;互联网工程工作小组在1993年发布了一新系列的标准——RFC 1518和RFC 1519——以定义…

初识数据结构及复杂度

1、数据结构 数据结构数据结构&#xff08;描述和组织数据&#xff09;&#xff0c;Java会把一些数据结构封装起来&#xff0c;在java中数据结构叫做集合。 数据结构&#xff1a;&#xff08;data structer&#xff09;是计算机存储、组织数据的方式&#xff0c;指相互之间存在…

mac电脑下载Netflix Mac(奈飞客户端)安装教程

Netflix Mac&#xff0c;奈飞官方客户端&#xff0c;带给您无限的电影和剧集体验&#xff01;与朋友分享最新热门剧集、电影&#xff0c;与家人一起享受高品质的流媒体内容。 通过Netflix Mac&#xff0c;您可以轻松地搜索、浏览和观看各种类型的影片&#xff0c;包括剧情片、…

【鸿蒙应用ArkTS开发系列】- 选择图片、文件和拍照功能实现

文章目录 前言创建多媒体Demo工程创建MediaBean 实体类创建MediaHelper工具类API标记弃用问题动态申请多媒体访问权限实现选择图片显示功能打包测试 前言 在使用App的时候&#xff0c;我们经常会在一些社交软件中聊天时发一些图片或者文件之类的多媒体文件&#xff0c;那在鸿蒙…

GitHub 2023排名前十的最佳开源项目

开源软件&#xff08;OSS&#xff09;彻底改变了当今软件开发的方式。在数百万个开源GitHub项目中&#xff0c;要找到最适合需求的开源项目可能会让人不知所措。 今天给大家列出2023年增长最快的前10个开源GitHub仓库。通过这些增长最快的开源项目&#xff0c;也可以从整体上了…

算法 离散化

整数离散化 适用条件 适用于有序的整数序列该序列的值域很大&#xff0c;该序列的数的个数很少使用的是数的相对大小而非绝对大小 算法思路 原数组 a &#xff1a; 数组下标&#xff1a;0 1 2 3 4 数组元素&#xff1a;1 2 2 5 109 映射数组 &#xff1a; 数组下标&…

Flask教程入门

1.学习Flask之前&#xff0c;首先需要对URL进行一定的了解。 URL的一些知识&#xff1a; 1.URL只能包含ASCII码里面一些可显示的字符&#xff0c;如A-Z&#xff0c;a-z&#xff0c;0-9&#xff0c;&&#xff0c;#&#xff0c;%&#xff0c;&#xff1f;&#xff0c;/等字符…

数据链路层——以太网协议、ARP协议

目录 以太网协议 以太网协议的简介 以太网协议所处的位置 以太网帧&#xff08;或者说MAC帧&#xff09;的格式 局域网通信原理 碰撞避免算法&#xff08;包含MTU的知识点&#xff09; 局域网攻击原理 ARP协议 ARP协议所在的位置 为什么要存在ARP协议&#xff08;或者…

nodejs669在线图书借阅管理系统vue前端

系统的设计与实现主要实现角色有管理员和用户,管理员在后台管理用户模块、用户表模块、图书借阅模块、图书归还模块、图书分类模块、token表模块、收藏表模块、书籍信息模块、图书资讯模块、留言板模块、书籍信息评论表模块、注册用户模块、配置文件模块、处罚记录模块、在线客…

Mysql更新Blob存储的Josn数据

Mysql更新blob存储的Josn数据 记录一次mysql操作blob格式存储的json字符串数据 1、检查版本 -- 版本5.7以上才可以能执行json操作 select version(); 2、创建测试数据 -- 创建测试表及测试数据 CREATE TABLE test_json_table AS SELECT UUID(), {"test1": {"…

Java---权限修饰符、final、static

文章目录 1. 权限修饰符2. final(最终态)3. static(静态) 1. 权限修饰符 修饰符同一个类中同一个包中的子类和无关类不同包的子类不同包的无关类private√默认√√protected√√√public√√√√ 2. final(最终态) 1. final关键字是最终的意思&#xff0c;可以修饰成员方法、…

OpenCV数字图像处理——检测出图像中的几何形状并测量出边长、直径、内角

一、简介 在传统的自动化生产尺寸测量中&#xff0c;常用的方法是利用卡尺或千分尺对被测工件的某个参数进行多次测量&#xff0c;并取这些测量值的平均值。然而&#xff0c;这些传统的检测设备或手动测量方法存在着一些问题&#xff1a;测量精度不高、测量速度缓慢&#xff0…

【单调栈】最大二叉树

题目&#xff1a; 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums…

python 爬虫之 爬取网站信息并保存到文件

文章目录 前期准备探索该网页的HTML码的特点开始编写代码存入文件总的程序文件存储效果 前期准备 随便找个网站进行爬取&#xff0c;这里我选择的是(一个卖书的网站&#xff09; https://www.bookschina.com/24hour/62700000/ 我的目的是爬取这个网站的这个页面的书籍的名称以…

git打tag和版本控制规范

我们在开发中经常会遇到要打tag的情况&#xff0c;但这个tag应该如何打呢&#xff1f;我不知道大家平时是怎么打的&#xff0c;但我基本就是从1.0.0开始进行往上递增&#xff0c;至于如何递增&#xff0c;基本凭感觉。今天同事新打了一个tag进行发版&#xff0c;然后被架构点名…

佳易王个体诊所管理系统电子处方软件,个体诊所人员服务软件,卫生室配方模板电子病历系统教程

佳易王个体诊所管理系统电子处方软件&#xff0c;个体诊所人员服务软件&#xff0c;卫生室配方模板电子病历系统教程 软件试用版下载可以点击最下方官网卡片 软件功能&#xff1a; 1、配方模板&#xff1a;可以自由添加配方分类&#xff0c;预先设置药品配方&#xff0c;可以…