一、μCos-ii _概述

网上关于μCosii的文章多不胜数,本人学习的过程中也参考了很多人的理解和想法,看的是卢有亮老师的《嵌入式实时操作系统-μC/OS原理与实践》(第2版),同时也参考了邵贝贝老师的《嵌入式实时操作系统μCOS-II》,断断续续一个月看了几遍书,也在stm32上简单移植了μCos-ii,这里也谈下自己的理解,如有纰漏,敬请指教。

1.什么是操作系统,为什么要学操作系统?

生活中PC上最常见的无非Windows、Mac OS、Linux等操作系统,移动设备上的Android、ios等。我们发现在这样一个操作系统的平台上,可以方便的进行各种应用程序的开发,而可以不用考虑对底层硬件的操作。

因此,操作系统是建立在系统硬件与用户程序之间的一层重要的系统软件,,是对硬件的第一层抽象与封装,它向上层提供封装好的API(应用程序接口),同时还承担着任务管理、事件管理、内存管理、文件管理、CPU管理、内存管理、I/O管理等核心功能。

我认为学习操作系统可以帮助我们避免抽象,更深入的理解计算机运行方式,从而构建出更加完整的知识体系。人们通过不断的抽象和创造,从晶体管到门电路,发展到集成电路,再到硬件平台和操作系统、人机接口,最后到与人打交道的应用程序,一步步实现了计算机的应用和普及。操作系统作为其中极其重要的一环是不可或缺的。

2.实时操作系统μCOS-II

μCOS-II作为实时操作系统(RTOS),最大的特点顾名思义就是实时性,即操作系统从接收任务到完成任务所需要的时间是基本确定的,其中又分为硬实时系统(规定时间内必须完成操作)和软实时系统(按优先级尽快完成造作即可)。其特点还包括多任务、多级中断和优先级调度机制。当然,μCOS-II也可能是实时操作系统里代码最精简,最适合入门选手的操作系统了,不过麻雀虽小,五脏俱全,对于学习和了解整个操作系统的框架还是基本够用的。卢老师书中指出的学习路径值得推荐:

图 1  μCos-ii嵌入式操作系统学习路径

3. μCOS-II系统基本构成

先明确几个重要概念:

1> 任务:在μCos-ii中体现为一个进程,是CPU执行调度和分配的最小单元,在程序中一般就体现为一个相对独立的函数。一般以循环的方式运行,当然运行需要满足一定的条件(包括处于就绪状态并且在就绪任务中优先级最高,不用等待其他事件发生或者需要等待的事件已经发生,系统进行了任务调度),其中任务调度也是μCos-ii的灵魂所在。需要说明的是,μCos-ii是多任务操作系统,每个任务也会有很多不同的状态,这点后续还会再说明。

2> 事件:事件指在操作系统运行过程中发生的重要事情,在μCos-ii中包括信号量、互斥信号量、事件标志组、消息邮箱、消息队列等5种,所有这5种事件或者说机制的设立都是为了一个目的:实现任务间的合作和无冲突的运行,或者也叫作“任务间同步”。如果把各个任务比作一条产线上的工人,那么事件的机制就是总控台下达的指令,只有所有工人按照指令工作,产线才能正常运行。当然,总控台需要了解各个岗位上的状况,所以这些信息也许要各个工人(任务)来提供。

3> 时钟:这个理解起来比较简单,就像单片机的晶振一样,操作系统也需要这样一个节拍信号,作为系统的时钟,也叫作时钟节拍μCos-ii中这种机制一般都是设定好固定的定时器中断(例如10ms一次),每次进入中断系统时钟加1。这个10ms就是操作系统执行任务调度和延时等操作的最小事件单位。

4> 中断:与裸机开发中断相应类似,也是保证实时性的基础。事实上,任务调度大多依靠中断,更多的任务切换也发生在中断中,例如中断服务程序中执行提交信号量或消息之类的代码,就会时一些等待信号量和消息的代码就绪,并在任务调度后得到运行。

5> 临界区:任务中访问共享资源的那一段程序称为临界区,因为共享资源需要互斥访问,即不允许两个任务同时访问互斥资源。这里有两个重要的要求:

(1)临界区不予许任务切换;

(2)临界区代码必须尽量短来保证实时性。

实现临界区互斥访问的机制一般有三种,后续还会再分析。

概述就讲到这里,简单总结下:

μCos-ii是一种多任务轻量化的实时嵌入式操作系统,它通多任务管理(μCos-ii灵魂)实现多任务的调度和切换,利用事件管理,包括信号量、互斥信号量、事件标志组、消息邮箱、消息队列等机制实现任务间通信,从而确保多任务的合作和无冲突运行。

μCos-ii学习笔记1_概述的更多相关文章

  1. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  2. Linux学习笔记1_用户和权限

    自从我大微软终于放下身段,决定给开源社区一个迟来的拥抱,追随多年的拥趸们像是突然得到了女神的垂青,各种茫然失措.痛哭流涕.欢欣鼓舞,纷纷唱了起来:“等了好久终于等到今天,梦了好久终于把梦实现……”唱完 ...

  3. MyBatis学习笔记(一) 概述

    一.什么是MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBat ...

  4. Python学习笔记 - day1 - 概述及安装

    Python概述 Python是一种计算机程序设计语言.我们平时已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合网页编程的JavaScript语言等等. Python ...

  5. XML学习笔记1——概述

    我对于XML是很不够重视的,认识也是非常肤浅的,因为在之前的Web经验中,基本上都可以使用JSON来代替XML,JSON网络流量少,解析快,JS支持好等这些特点让我对自己的观点坚信不疑.然而我渐渐地改 ...

  6. java学习笔记--1_常见输入输出语句熟悉篇章

    今天上oj,想来是准备做做算法和数据结构的.看了看以前做的基础题目,想着就先熟悉一下java的语言吧! 以下是今天做的10道题目. 备注:oj有时候对格式要求非常严格,因为不在格式上纠结太久,只要ec ...

  7. angular2新手学习笔记(1)概述

    作为培训生出生的一员.在培训出来之后如愿的找到了一份能温饱的工作.进来之后告知公司后面的项目需要angular2来搭建. 对于只会jQuery和bootstrap这两招的我来说无疑是一个巨大的挑战,在 ...

  8. 以太坊区块链Java(EthereumJ)学习笔记:概述

    本系列文章介绍以太坊区块链基于Java语言的解决方案.通过介绍EthereumJ定义的主要模块和Class,希望为大家学习和使用EthereumJ提供一些帮助. 整体架构 以太坊的Java解决方案主要 ...

  9. Arria10 SDI II学习笔记

    12G-SDI16是什么意思? 关于 int_vpid_byte1 int_vpid_byte2 int_vpid_byte3 int_vpid_byte4 这些参数是不是如果外部数据有就不需要传输, ...

随机推荐

  1. 【AR实验室】ARToolKit之概述篇

    0x00 - 前言 我从去年就开始对AR(Augmented Reality)技术比较关注,但是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual ...

  2. 构建通用的 React 和 Node 应用

    这是一篇非常优秀的 React 教程,这篇文章对 React 组件.React Router 以及 Node 做了很好的梳理.我是 9 月份读的该文章,当时跟着教程做了一遍,收获很大.但是由于时间原因 ...

  3. .Net 大型分布式基础服务架构横向演变概述

    一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...

  4. Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用(后续)

    在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]里面提到了Microsoft 身份认证,其实这也是一大块需要注意的地方,特作为后续补充这些知识点.上章是使用了Microsof ...

  5. PHP之时间和日期函数

    // 时间日期函数 Time <?php date_default_timezone_set('UTC'); // 获取当前时间的时间戳 $time0 = mktime(); $time1 = ...

  6. Consul-template的简单应用:配置中心,服务发现与健康监测

    简介 Consul-template是Consul的一个方扩展工具,通过监听Consul中的数据可以动态修改一些配置文件,大家比较热衷于应用在Nginx,HAProxy上动态配置健康状态下的客户端反向 ...

  7. 【干货分享】流程DEMO-固定资产转移流程

    流程名: 固定资产转移  业务描述: 固定资产从某员工转移至另一员工,转出人与转入人必须不同  流程相关文件: 流程包.xml  流程说明: 直接导入流程包文件,即可使用本流程  表单:  流程:  ...

  8. React Native Android gradle下载慢问题解决

    很多人会遇到 初次运行 react-native run android的时候 gradle下载极慢,甚至会失败的问题 如下图 实际上这个问题好解决的 首先 把对应版本的gradle下载到本地任意一个 ...

  9. atitit.管理学三大定律:彼得原理、墨菲定律、帕金森定律

    atitit.管理学三大定律:彼得原理.墨菲定律.帕金森定律 彼得原理(The Peter Principle) 1 彼得原理解决方案1 帕金森定律 2 如何理解墨菲定律2 彼得原理(The Pete ...

  10. Linux基础介绍【第一篇】

    Linux简介 什么是操作系统? 操作系统,英文名称Operating System,简称OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心 ...