一、μ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灵魂)实现多任务的调度和切换,利用事件管理,包括信号量、互斥信号量、事件标志组、消息邮箱、消息队列等机制实现任务间通信,从而确保多任务的合作和无冲突运行。