|
μC/OS-II使用中的几个热点问题
|
The Hot Points of Using Embedded Real Time Kernel
μC/OS-II
|
■清华大学工程物理系 邵贝贝 龚光华 薛 涛
|
《μC/OS-II——源码公开的实时嵌入式操作系统》一书是Jean J. Labrosse 所著,“Micro μC/OS-II
The Real-Time Kernel”一书的中译本。该书于2001年7月出版以后,引起了国内嵌入式实时系统应用领域中科技人员的极大兴趣。一些有名的大学已经或者打算把它当作教材用于教学。有的公司提出以之培训开发嵌入式应用的员工。在实际应用中,用户提出较多的问题主要有:μ
C/OS-II的应用领域和适用环境如何,交叉编译工具问题,如何移植到用户目标系统上,以及如何实现基于 μC/OS-II的著如IC/PIP网络协议等问题。此外还有使用许可证问题等,本文拟对这些
μC/OS-II使用中的热点问题做一简要回答。
μC/OS与μC/OS-II
μC/OS和μC/OS-II是专门为嵌入式应用设计的实时操作系统内核。注解得很详细的源代码有200页,其中95%左右是用C语言写的,与CPU类型相关的代码用8088的汇编写成,不超过200行。μC/OS最早的版本叫做
COS,关于 μCOS的论文,分两期连载在美国的“嵌入式系统编程”(Embedded System Programming)杂志的1992年第5期和第6期上,
COS的源码放在该杂志网页的留言版(BBS)上供用户下载。1992年末,美国的R&D出版社出版了“Micro C/OS The Real-Time
Kernel”一书,书中附有一张软盘,是μC/OS的源代码。该书后来成为一本畅销书,发行量突破了15000。μC/OS是基于优先级的可剥夺型(Preemptive)实时内核,可裁剪、可固化。由于与硬件相关的代码仅200行左右,并写在两个单独的文件中,且注解很清楚,故很容易将
C/OS移植到其它类型的CPU上。
在后来的几年中,用户纷纷将μC/OS移植到了各种CPU上,如Motorola的68HC11、68HC1216、68K、CPU32、CPU32+、PowerPC等。Intel的80X86、奔腾、奔腾-II、8051、8052、MCS-251、80196、8096等;日立的64180、H8/3XX系列、SH系列;西门子的80C166和TriCore、ARM的ARM6、ARM7、Analog的AD21xx、TI的TMS320飞利浦的XA、三菱的M16、M32等等。应用领域涵盖了如照相机业,医疗器械、音响设施,发动机控制、网络设备、高速公路电话系统,自动柜员机、工业机器人等。
到1998年,作者出了他的第二本书“μC/OS-II The Real-Time Kernel”,给μC/OS增加了一些新功能,对源码进行了整理,说明得更详尽,书的厚度也增加了200页,Jean
J. Labrosse先生开通了μC/OS-II的商业网站,并不断推出新版本。
使用许可证
μC/OS是完全免费的,μC/OS的源码可以免费使用,但用户不得以卖源码来谋利。μC/OS的目标代码可以免费地嵌入到用户的产品中去,但用户得标明在产品中使用了μC/OS。“μC/OS
The Real-Time Kernel”一书中所附的软盘是版本1.08。由于μC/OS的商业价值得到了社会越来越多的认可,高版本的μC/OS,即版本1.10以上不再是完全免费的。
μC/OS的2.0版本就是μC/OS-II,最新的2.51版本的μC/OS-II目前售价55.95美元。
μC/OS-II的源码和目标码可以在有资质的大学中免费提供给学生用于教学目的。而以盈利为目的的将μC/OS-II的目标代码嵌入到产品中去则应得到“目标代码销售许可证”。
就准备从事嵌入式应用开发工作的大学生、研究生而言,μC/OS-II无疑是一本极好的教材。对于从事嵌入式应用开发工作的工程技术人员来说,μC/OS和μC/OS-II则是一件很实用的工具。
单片机的C编译器
由于各公司出的CPU在硬件上有很大区别,要使用针对不同CPU的交叉编译器,有的公司在推出CPU芯片时提供交叉C编译器,而更多的情况是由第三方提供交叉C语言编译器,编译μC/OS或μC/OS-II必须有C语言的编译器,对于C语言来说,一般是使用标准的ANSI的C,而功能强大的C编译器不但提供C,还能提供视窗下的集成环境、CPU的纯软件仿真以及在线的源码级调试工具。
一般情况下,交叉编译器是要向第三方购买的,选择C编译器厂商时,可参考μC/OS-II网络上移植范例栏目,该栏目中说明了移植时所用的编译器是什么公司的。
免费的C编译是Linux下的gcc。几乎所有32位CPU都可以使用gcc交叉C编译器。目前一些Windows环境下的软件如Cygwin
ASHWare等都允许在Windows环境下使用Linux的命令行方式,是不错的开发工具,但由于Linux下的应用程序都相当复杂,非计算机方面的高级专业人才难以掌握。Linux是自由软件,版本也很多,有些版本不很稳定,与手册难以对应。特别是遇到问题时,非专业人士很难解决。
适宜使用的CPU与系统开销
可以说凡是能够使用C语言编程的CPU都可以使用μC/OS或μC/OS-II,在μC/OS-II.com网站上有移植范例,在移植μC/OS-II栏目下,总共有80余款,较μC/OS的移植范例多出几倍。新出现的CPU不久后就能找到移植范例,以Motorola芯片为例,除前面提到的品种,68HC08、ColdFire、以及DSP568XX上都有运行μC/OS-II的范例。
我们知道,在嵌入式应用中使用实时操作系统是有系统资源开销的,也就是额外的ROM/RAM开销和CPU负荷。由于实时操作系统引起的CPU额外负荷一般在5%以下,故不成为使用中的问题,而对于单片机,且工作在单片方式下,则要考虑由于引入操作系统带来的存储器开销。由于目前单片机中FLASH的容量已经可以做到几十K乃至几百K,而μC/OS-II的ROM开销一般在3K到10K之间,故ROM的开销对于单片类应用也不成为问题。在单片方式下运行μC/OS或μC/OS-II要考虑的是RAM的开销,由于目前单片机片内静态随机存储器SRAM还不可能做得很大,一般只有几百字节至十几K,虽然我们也给出过在只有512字节的68HC08GP32上运行
μC/OS-II的例子,但笔者认为这只是一个用于学习的例子,可运行的任务只有几个,可使用的操作系统的功能也少得可怜。笔者认为,至少有2K的RAM空间,使用μC/OS或μC/OS-II才有意义。当然如果嵌入式系统中使用了外扩的RAM和ROM,使用实时操作系统则全然没有问题。
基于μC/OS-II的应用软件
μC/OS和μC/OS-II仅仅是一个实时操作系统内核,和商业实时操作系统软件包比较起来,它缺少Utilities这一部分,如文件系统、远程函数调用库、通信软件库。通信软件包括:TCP/IP软件库、篮牙通信软件库、IrDA红外通信软件库等。这一类软件的解决途径无非是两个,一个是买现成的,另一个途径是自己写。现成的第三方软件厂商可以从μC/OS-II网页上查到,如果用户仅仅需要用单片机实现例如TCP/IP协议中的某些功能的话,自主开发并不很难。一个TCP/IP通信的库,二进制代码一般有70K到80K。单片机系统只需要将其中一部分嵌入到系统中去。英国作者Jeremy
Bentham在他的“嵌入式系统用TCP/IP瘦服务器” (TCP/IP Lean Web Server)一书中,提供了用PIC单片机实现TCP/IP协议的例子。所用的单片机片内RAM只有348个字节,TCP/IP通信程序也只有不到7K字节,故参考别人做过的程序范例,自行开发这一类的应用也是学习的极好过程。
|
|