μCos-ii学习笔记1_概述
一、μ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_概述的更多相关文章
- Struts2 学习笔记(概述)
Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...
- Linux学习笔记1_用户和权限
自从我大微软终于放下身段,决定给开源社区一个迟来的拥抱,追随多年的拥趸们像是突然得到了女神的垂青,各种茫然失措.痛哭流涕.欢欣鼓舞,纷纷唱了起来:“等了好久终于等到今天,梦了好久终于把梦实现……”唱完 ...
- MyBatis学习笔记(一) 概述
一.什么是MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBat ...
- Python学习笔记 - day1 - 概述及安装
Python概述 Python是一种计算机程序设计语言.我们平时已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合网页编程的JavaScript语言等等. Python ...
- XML学习笔记1——概述
我对于XML是很不够重视的,认识也是非常肤浅的,因为在之前的Web经验中,基本上都可以使用JSON来代替XML,JSON网络流量少,解析快,JS支持好等这些特点让我对自己的观点坚信不疑.然而我渐渐地改 ...
- java学习笔记--1_常见输入输出语句熟悉篇章
今天上oj,想来是准备做做算法和数据结构的.看了看以前做的基础题目,想着就先熟悉一下java的语言吧! 以下是今天做的10道题目. 备注:oj有时候对格式要求非常严格,因为不在格式上纠结太久,只要ec ...
- angular2新手学习笔记(1)概述
作为培训生出生的一员.在培训出来之后如愿的找到了一份能温饱的工作.进来之后告知公司后面的项目需要angular2来搭建. 对于只会jQuery和bootstrap这两招的我来说无疑是一个巨大的挑战,在 ...
- 以太坊区块链Java(EthereumJ)学习笔记:概述
本系列文章介绍以太坊区块链基于Java语言的解决方案.通过介绍EthereumJ定义的主要模块和Class,希望为大家学习和使用EthereumJ提供一些帮助. 整体架构 以太坊的Java解决方案主要 ...
- Arria10 SDI II学习笔记
12G-SDI16是什么意思? 关于 int_vpid_byte1 int_vpid_byte2 int_vpid_byte3 int_vpid_byte4 这些参数是不是如果外部数据有就不需要传输, ...
随机推荐
- C语言 · 乘法表
问题描述 输出九九乘法表. 输出格式 输出格式见下面的样例.乘号用"*"表示. 样例输出 下面给出输出的前几行:1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=94 ...
- [版本控制之道] Git 常用的命令总结(欢迎收藏备用)
坚持每天学习,坚持每天复习,技术永远学不完,自己永远要前进 总结日常开发生产中常用的Git版本控制命令 ------------------------------main-------------- ...
- 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的?
在<中篇>中,我们对管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的.总的来说,管道由一个服务器和一个HttpApplication构成 ...
- Python 正则表达式入门(中级篇)
Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...
- iOS从零开始学习直播之3.美颜
任何一款直播软件都必须进行美颜,不然哪来的那么多美女,所以技术改变世界,不只是说说而已.美颜在采集的时候就得就行,让主播实时看到直播的效果. 1.美颜原理 其实美颜的本质就是美白和磨皮,分别通 ...
- MySQL数据库罕见的BUG——Can't get hostname for your address
在连接mysql jdbc时候,抛出了 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communicat ...
- linux压力测试工具stress
最近给PASS平台添加autoscaling的功能,根据服务器的负载情况autoscaling,为了测试这项功能用到了stress这个压力测试工具,这个工具相当好用了.具体安装方式就不说了.记录下这个 ...
- No plugin found for prefix ‘jetty’ in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories
maven配置文件(最大的那个)的<pluginGroups></pluginGroups>增加一行如下<pluginGroups><pluginGroup& ...
- [DS] 标记字段
标记字段 代码中有时候有这种需求:需要一个公共访问的标记字段,以下称为标记字段. 下面是案例: 一个订单详情页面,如果页面在显示中,程序中其它地方需要访问这个"正在查看中"的订单信 ...
- 免费开源的 .NET 分布式组件库 Exceptionless Foundatio
前言 在互联网时代,分布式应用.系统变得越来越多,我们在使用 .Net 技术构建分布式系统的时候,需要使用到一些组件或者是助手库来帮助我们提高生产力以及应用程序解耦,但是纵观.Net圈,能够符合要求的 ...