一、μ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. 深入理解BFC

    定义 在解释BFC之前,先说一下文档流.我们常说的文档流其实分为定位流.浮动流和普通流三种.而普通流其实就是指BFC中的FC.FC是formatting context的首字母缩写,直译过来是格式化上 ...

  2. javascript:逆波兰式表示法计算表达式结果

    逆波兰式表示法,是由栈做基础的表达式,举个例子: 5 1 2 + 4 * + 3 -  等价于   5 + ((1 + 2) * 4) - 3 原理:依次将5 1 2 压入栈中, 这时遇到了运算符 + ...

  3. H5项目开发分享——用Canvas合成文字

    以前曾用Canvas合成.裁剪.图片等<用H5中的Canvas等技术制作海报>.这次用Canvas来画文字. 下图中"老王考到驾照后"这几个字是画在Canvas上的,与 ...

  4. [原] KVM 虚拟化原理探究 —— 目录

    KVM 虚拟化原理探究 -- 目录 标签(空格分隔): KVM KVM 虚拟化原理探究(1)- overview KVM 虚拟化原理探究(2)- QEMU启动过程 KVM 虚拟化原理探究(3)- CP ...

  5. 代码的坏味道(21)——中间人(Middle Man)

    坏味道--中间人(Middle Man) 特征 如果一个类的作用仅仅是指向另一个类的委托,为什么要存在呢? 问题原因 对象的基本特征之一就是封装:对外部世界隐藏其内部细节.封装往往伴随委托.但是人们可 ...

  6. django 第三天 有关库使用

    项目中经常会用到第三方的lib和app,有些lib和app会进行不断更新,更新后可能会存在冲突,因此可以创建externals目录,下面欧app和libs.app存放django-cms,haysta ...

  7. 好用的Markdown编辑器一览 readme.md 编辑查看

    https://github.com/pandao/editor.md https://pandao.github.io/editor.md/examples/index.html Editor.md ...

  8. MySQL全文索引 FULLTEXT索引和like的区别

    1.概要 InnoDB引擎对FULLTEXT索引的支持是MySQL5.6新引入的特性,之前只有MyISAM引擎支持FULLTEXT索引.对于FULLTEXT索引的内容可以使用MATCH()-AGAIN ...

  9. Spring MVC入门

    1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...

  10. 学习笔记:delphi之TStringGrid

    1.说明 最近加入了一个项目组,使用的开发工具是delphi6,想想又要开始搞这个工具有点小忧伤,但没办法谁让咱就是个打杂的尼... 的需求是显示一个类似于Word/excel的那种表格,可以合并列等 ...