一、μ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. ASP.NET Aries 入门开发教程1:框架下载与运行

    背景: 鉴于框架的使用者越来越多,文档太少,不少用户反映框架的入门门槛太高. 好吧,再辛苦下,抽时间写教程吧! 步骤1:下载框架源码 开源地址:https://github.com/cyq1162/A ...

  2. Beanstalkd一个高性能分布式内存队列系统

    高性能离不开异步,异步离不开队列,内部是Producer-Consumer模型的原理. 设计中的核心概念: job:一个需要异步处理的任务,是beanstalkd中得基本单元,需要放在一个tube中: ...

  3. JavaScript常见的五种数组去重的方式

    ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...

  4. app引导页(背景图片切换加各个页面动画效果)

    前言:不知不觉中又加班到了10点半,整个启动页面做了一天多的时间,一共有三个页面,每个页面都有动画效果,动画效果调试起来麻烦,既要跟ios统一,又要匹配各种不同的手机,然后产品经理还有可能在中途改需求 ...

  5. 深入研究Visual studio 2017 RC新特性

    在[Xamarin+Prism开发详解三:Visual studio 2017 RC初体验]中分享了Visual studio 2017RC的大致情况,同时也发现大家对新的Visual Studio很 ...

  6. zookeeper源码分析之一服务端启动过程

    zookeeper简介 zookeeper是为分布式应用提供分布式协作服务的开源软件.它提供了一组简单的原子操作,分布式应用可以基于这些原子操作来实现更高层次的同步服务,配置维护,组管理和命名.zoo ...

  7. jquery屏幕滚动计算事件总结

    获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 : $(window).width(); 获取页面的文档高度: $(docume ...

  8. css常用hack

    原文地址:css常用hack 突然想起今天早上在CNZZ看到的统计数据,使用IE6.7的用户比例还真多,看到之后我的心都碎了.微软都放弃了为毛还有这么多人不死心? 所以说,IE下的兼容还是得做的. – ...

  9. npm 使用小结

    本文内容基于 npm 4.0.5 概述 npm (node package manager),即 node 包管理器.这里的 node 包就是指各种 javascript 库. npm 是随同 Nod ...

  10. Eclipse出现"Running Android Lint has encountered a problem"解决方案

    安装eclipse for android 时候的错误记录,转载自:http://blog.csdn.net/chenyufeng1991/article/details/47442555 (1)打开 ...