【小黑嵌入式系统第十课】μ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 OS,WinCE,嵌入式Linux,Lynx, μCOS、Nucleus,以及国内的Hopen、Delta 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)。中断服务程序做事件处理,处理完成后,程序回到:
- 在前后台系统中,程序回到后台程序;
- 对非抢占式内核而言,程序回到被中断了的任务;
- 对抢占式内核而言,让进入就绪态的优先级最高的任务开始运行。

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不是自由软件和免费软件,用于商业目的时须取得许可证
相关文章:
【小黑嵌入式系统第十课】μC/OS-III概况——实时操作系统的特点、基本概念(内核任务中断)、与硬件的关系实现
文章目录 一、为什么要学习μC/OS-III二、嵌入式操作系统的发展历史三、实时操作系统的特点四、基本概念1. 前后台系统2. 操作系统3. 实时操作系统(RTOS)4. 内核5. 任务6. 任务优先级7. 任务切换8. 调度9. 非抢占式(合作式)内核10…...
在easyswoole 中,配置文件如何加载外部配置
在一个项目中 目录结构是这样的 网站的公共配置,包括一些数据库连接配置,redis连接配置 /web/config/redis_config.php/web/config/mysql_config.php 下面是Easyswoole 项目目录 所有的配置均放在ES项目中的Config目录中 文件名且采用大驼峰命名。如…...
小程序微信支付API?以及参数有哪些
微信小程序支付API有两个,分别是 wx.chooseWXPay 和 wx.pay。 wx.chooseWXPay 是用于唤起微信支付的API,它支持扫码支付、JSAPI支付、APP支付等。它返回一个Promise对象,可以在then方法中处理支付结果。 wx.pay 是用于发起微信支付的API&am…...
【算法】一个简单的整数问题(树状数组、差分)
题目 给定长度为 N 的数列 A,然后输入 M 行操作指令。 第一类指令形如 C l r d,表示把数列中第 l∼r 个数都加 d。 第二类指令形如 Q x,表示询问数列中第 x 个数的值。 对于每个询问,输出一个整数表示答案。 输入格式 第一行…...
Android flutter项目 启动优化实战(二)利用 App Startup 优化项目和使用flutterboost中的问题解决
背景 书接上回: Android flutter项目 启动优化实战(一)使用benchmark分析项目 已经分析出了问题: 1.缩短总时长(解决黑屏问题、懒启动、优化流程)、2.优化启动项(使用App Startup)、3.提升用…...
Java---权限修饰符、final、static
文章目录 1. 权限修饰符2. final(最终态)3. static(静态) 1. 权限修饰符 修饰符同一个类中同一个包中的子类和无关类不同包的子类不同包的无关类private√默认√√protected√√√public√√√√ 2. final(最终态) 1. final关键字是最终的意思,可以修饰成员方法、…...
unity实时保存对象的位姿,重新运行程序时用最后保存的数据给物体赋值
using UnityEngine; using System.IO; // using System.Xml.Serialization; public class SaveCoordinates : MonoBehaviour {public GameObject MainObject;//读取坐标private float x;private float y;private float z;private Quaternion quaternion;private void Start(){/…...
【Java Spring】Spring MVC基础
文章目录 1、Spring MVC 简介2、Spring MVC 功能1.1 Spring MVC 连接功能2.2 Spring MVC 获取参数2.2.1 获取变量2.2.2 获取对象2.2.3 RequestParam重命名后端参数2.2.4 RequestBody 接收Json对象2.2.5 PathVariable从URL中获取参数 1、Spring MVC 简介 Spring Web MVC是构建于…...
MES系统的功能清单
MES系统的功能清单 一、生产计划管理 1. 订单和生产计划制定:根据客户需求和市场状况,制定生产计划和订单,确保生产资源的合理分配和生产进度的有效管理。 2. 生产排程:根据生产计划和订单,结合设备、人员、物料等资…...
docker 安装elasticsearch集群
准备工作 docker 安装好,docker compose 安装好编辑好docker-compose.yml文件(本文会提供)生成elastic-certificates.p12密钥,与docker-compose文件在同一个目录(本文会介绍生成方式)准备elasticsearch配置…...
Spring Boot 3 + Spring Security 6 最新版本修改 Json 登录后 RememberMe 功能问题失效的解决方案
当 Spring Boot 版本更新到 3 之后,最低要求的 JDK 版本变为 17,相应的 最新版本的 Spring Security 的配置也发生了变化,一下主要讲解一些新的 Spring Security 的配置方法 1. 配置由继承WebSeucrityConfigurerAdapter变成只需添加一个Secur…...
Java核心知识点整理大全21-笔记
目录 18.1.5.1. upstream_module 和健康检测 18.1.5.1. proxy_pass 请求转发 18.1.6. HAProxy 19. 数据库 19.1.1. 存储引擎 19.1.1.1. 概念 19.1.1.2. InnoDB(B树) 适用场景: 19.1.1.3. TokuDB(Fractal Tree-节点带数据&…...
Redis深入理解-主从架构下内核数据结构、主从同步以及主节点选举
Redis 主从挂载后的内核数据结构分析 主节点中,会通过 clusteNode 中的 slaves 来记录该主节点包含了哪些从节点,这个 slaves 是一个指向 *clusterNode[] 数组的数据结构从节点中,会通过 clusterNode 中的 slaveof 来记录该从节点属于哪个主…...
java中BigDecimal的介绍及使用(二)
系列文章目录 java中BigDecimal的介绍及使用,BigDecimal格式化,BigDecimal常见问题java中BigDecimal的介绍及使用(二) 文章目录 系列文章目录一、前言二、BigDecimal提供的方法2.1、stripTrailingZeros() 去除小数尾部所有的02.2、int signum()2.3、int…...
NX二次开发UF_MTX3_identity 函数介绍
文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_MTX3_identity Defined in: uf_mtx.h void UF_MTX3_identity(double identity_mtx [ 9 ] ) overview 概述 Returns a 3 x 3 identity matrix. 返回一个3 x 3的单位矩阵。 UFUN…...
解决Hadoop DataNode ‘Incompatible clusterIDs‘报错
问题 启动hadoop时报错Failed to add storage directory 2023-11-26 12:02:06,840 WARN common.Storage: Failed to add storage directory [DISK]file:xxx java.io.IOException: Incompatible clusterIDs in xxx/dfs/data: namenode clusterID CID-xxxxxx; datanode cluste…...
计算机毕业设计|基于SpringBoot+MyBatis框架的电脑商城的设计与实现(系统概述与环境搭建)
计算机毕业设计|基于SpringBootMyBatis框架的电脑商城的设计与实现(系统概述与环境搭建) 该项目分析着重于设计和实现基于SpringBootMyBatis框架的电脑商城。首先,通过深入分析项目所需数据,包括用户、商品、商品类别、收藏、订单…...
神器!使用 patchworklib 库进行多图排版真棒啊
如果想把多个图合并放在一个图里,如图,该如何实现 好在R语言 和 Python 都有对应的解决方案, 分别是patchwork包和patchworklib库。 推介1 我们打造了《100个超强算法模型》,特点:从0到1轻松学习,原理、…...
MySQL -DDL 及表类型
DDL 创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification:[DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name 1.CHARACTER SET:…...
主从同步机制
RocketMQ的Broker分为Master和Slave两个角色,为了保证高可用性,Master角色的机器接收到消息后,要把内容同步到Slave机器上,这样一旦Master宕机,Slave机器依然可以提供服务。下面分析Master和Slave角色机器间同步功能实…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
