邵贝贝:嵌入式操作系统μC/OS-III 作者:邵贝贝 来源:嵌入式系统联谊会
邵老师长期从事单片机和嵌入式系统教学和应用工作,并负责清华大学飞思卡尔实验室工作。邵老师与大家分享了μC/OS的发展经历,即将发布的μC/OS-III的细节,以及他对未来嵌入式操作系统的认识。
以下是文字实录。
大家好,我讲讲μC/OS-III,原来是μC/OS-II,现在到了μC/OS-III。今年第一期《电子产品世界》里有一篇调查,有627份中国嵌入式系统工程师的调查问卷,显示出现在用的最多的38%使用Linux,排在第二个就是μC/OS-II占到34%,其中μC/OS-II还是专门为嵌入式设计的实时操作系统,说明μC/OS-II从前几年进到中国以来,是有影响力的操作系统,据我了解,在美国好像还没有这么多的影响。影响力比较大的是中国和印度这样大的发展中国家,也包括日本和韩国。我们可以看到几乎能想到的CPU,在网上都可以下载到、移植的范例,这还不是全部,很多像Altera软核里面都有μC/OS的移植。
最早μC/OS是一本书,是93年出的,95年我到意大利国际物理中心准备做instructor,开一个叫做《嵌入式实时系统在物理学应用》的一个讲习班,讲习班大部分是印度人、中国人等,讲课老师大部分从欧洲核研究中心和美国大学来的,其中就拿了这个东西作为教材。它最早是为摩托罗拉68HC11增强型单片机写的,管理四个任务,用查表的办法来确定优先级。90%以上的代码是自己写的,和硬件无关,相关的代码不到200行,书上提供了一个可以在PC上跑的一个8088范例,可裁剪可固化,其实μC/OS这本书是个很好的教材,只有261页,其中有100页是源代码,解释了150页。后来这本书,96年以后,在我们实验室,给研究生用的较多,一直没找到哪个出版社愿意买它的版权。
到了2000年的时候,再想回到μC/OS的时候,已经不太可能,μC/OS-II出来了,后来第二年,电力出版社买了版权,我们就翻译了一下,到了第三本书,μC/OS-II这本书,这个就有了差不多600页,而且把源码附在光盘上,就被美国航空航天管理局认可的可以上直升飞机的一个操作系统,是一个很好用的操作系统,对于学校教学来说,这个功能很强,又很复杂。在教学上不如老版本了。这是第三本书的中译文,2003年出的。我们看它的发展,在μC/OS一开始,书上有个μC/OS的故事,讲到他写的这个东西,当时发表文章都没人理他,后来放到网上,下载的人很多,慢慢得到认可,所以最早1.08的版本,是放在网上,是不要版权的。到了1.10版本以后,被认可了,如果想要拿去牟利的话,就要给他一些回报。但作为教学研究,不谋利的时候,还是可以使用的。μC/OS也好,μC/OS-II也好,它是基于优先级的,用查表的算法去管理64个任务,只能取0~63这64个优先级。今年3月,已经有μC/OS-III发布可以使用了。
那么从μC/OS-II到μC/OS-III有哪些不同的地方呢?增加了什么,我们看改动还是很大的。一个是原来只有0~63个优先级,而且优先级不能重复,现在允许几个任务使用同一个优先级,在同一个优先级里面,支持时间片调度法;第二个是允许用户在程序运行中动态配置实时操作系统内核资源,比如,任务、任务栈、信号量、事件标志组、消息队列、消息数、互斥型信号量、存储块划分和定时器,可以在程序运行中变更。这样,用户可以避免在程序编译过程中出现资源不够分配的问题。在资源复用上,也做了一些改进。μC/OS-II中,最多任务数有64个,到了版本2.82以后是256个,μC/OS-III中,用户可以由任意多的任务、任意多的信号量、互斥型信号量、事件标志、消息列表、定时器和任意分配的存储块容量,仅受限于用户CPU可以使用的RAM量。这个也是一个很大的扩展。(问:邵老师,它的这个数是启动时就固定的,还是启动后随便定?)它是配置的时候可以自由定义的,只有你的RAM足够大的话。第四点是增加了很多功能,功能总是越来越多的,大伙可以看一下的。原来这些功能在μC/OS-II里面是没有的。
下面一点:除每个任务的最长关中断时间,内在性能测试允许用户测得系统的最长关中断时间。就是它提供了一些工具可以测量每个任务关中断的时间;用户在测得每个任务的最长禁止调度时间基础上,可以测得系统禁止任务调度的最长时间,也是说做了个测量;每次发出的信息都带有时间戳,用户也容易得到任务级的响应时间;性能测试还包括任务切换次数计数器和每个任务的CPU使用率等,这个在调试的时候,还是蛮有用的。第六,μC/OS-III设计成能方便地按照CPU架构优化,特别是其数据类型可按照CPU能适应的最佳位数宽度修改(8-16-32);选择和确定优先级的算法可以用汇编语言写,以发挥一些有特殊指令的CPU的优势,有很多CPU有置位和复位指令,计数器计到零,还有就是找出第一个不为零位指令等。第七条,有很多数需要自行处理的内部据结构和变量,是通过给调度器上锁的方式保护这些临界段代码的,不使用关中断的方式,内核关中断的时钟周期几乎为零,这就保证了μC/OS-III能够响应哪些最快的中断等。第八,μC/OS-III还支持内核觉察式调试,用户友好地使内置内核觉察调试器检查、显示μC/OS-III的变量、数据结构、支持μC/Probe工具在程序运行过程中动态显示修改各种变量。从这些改动上来看,μC/OS-III还是比以前做了很大的优化的,和以前的产品有很多的区别。
我觉得从小内核μC/OS-II到μC/OS-III,已经有17年过去了,很多性能在往大的比较出名的操作系统,像VxWorks、Wind River上靠拢,何小庆告诉我Wind River最近被Intel收购了,看了Wind River的基本情况,应该说VxWorks是公认的最好的嵌入式RTOS,是一个完整的自成体系的软件包,但是在过去很多年,它曾经是一个靠BSP支持的黑盒子,用户可以不关心这些源码,它是这样一种思路。近年来也在公开源码。
看到消息说,Wind River打算进一步转向Linux用于ARM和PowerPC,Intel为支持多核设计,打算发展软件,如嵌入式应用、Linux。多核应用是为了INTEL的重点。面前μC/OS-II的商业模式还是主要靠出书,让学生学习使用,现在它的团队有10人左右,比较小。我们知道如果一个软件没人维护,也是没有生命力的,它仅仅维护一个内核,在第三方有很多单位和它合作,做很多其他的事情,像人机界面、文件系统、TCP/IP等等,从网站上我们看到,大部分都是第三方合作开发的,我看第三方的报价也都不便宜,都在6000美元以上,当然有很多自由软件也在和它在结合。用户根据自己需要可以去组合。商业模式这些事情,其实我并不是很懂,我教书就想用老的,教书挺好的,所以商业模式这一块我也是瞎说,呵呵。
思考和体会,经过17年,从1个小内核发展成为1个可以和大的商业RTOS媲美的专门用于嵌入式系统的成熟的RTOS体系,一个特点就是开放源代码,让很多工程师,从学习,到认识,到使用。作为一个软件,一个内核,就需要维护,需要团队,它的团队现在很小,大概有10人;需要第三方的支持,靠这样的形式来组织起来的;也需要和它发展相适应的商业模式;也会是对VxWorks等大公司产品的一种冲击。我就总结了这么几条。关于μC/OS的实时性问题,其实有一个函数就是delay这个函数,如果有64个任务的话,就有64个需要delay的计数器,每次时间中断的时候,都要来查这张表,一个一个地把它去delay,任务多的时候,时间就长,任务少的时候,时间就少,这是μC/OS唯一达不到硬实时的地方,。在这个地方上,还不能说实时性还是硬实时,除非你把时间定义为这个表上的时间,解决办法呢?这是我们最近做的一些工作,就是用双核16位的freescale的HC12S这样一个单片机,它有一个协处理器是专门来响应中断的,把定时这个功能放到协处理器来做,一个是定时器timer可以很短,从10毫秒可以到微秒级,可以到50微秒,我们做了一个测试,就是把时钟节拍放到33微秒或者62微秒这样来处理的话,如果不加协处理器的话,时钟节拍就占到53%,那就没法用了。如果用协处理器做这些事,协处理器处理这些事大概在75微秒,这样就把硬实时用双内核就实现了,所以双内核对这个还是很有好处的。
我就介绍到这,最后是Jean Labrosse他们两口子4月7号到中国玩,到我们实验室看看,照片是Labrosse和他夫人,其他是我们实验室青年教师和学生。我就说到这,谢谢!