Linux源码公开并不神秘,但由于代码浩瀚,用于学习与研究实属不易。而无论在嵌入式产品开发中使用还是不使用RTOS,学习和掌握RTOS的原理和设计思想都至关重要。专门为嵌入式应用设计的RTOS,?C/OS和 ?C/OS-II 则不仅实用而且是难得的入门教材。?C/OS 是免费软件, 关于?C/OS的第一本书是1992年出版的,世界上数以千计的工程技术人员已将?C/OS成功地移植到了几乎所有知名的CUP上,并应用到了各个应用领域。 由于?C/OS的商业价值得到了认可,?C/OS-II用于教育仍免费,商用则要许可证了 。1998年,“?C/OS-Ⅱ The Real Time Kernel”一书出版。在2年前的“嵌入式2000学术研讨会”上,我介绍了?C/OS和 ?C/OS-Ⅱ,引起了国内人士的广泛注视,中译本<>于2001年8月出版。我校已在嵌入式系统与单片机课程中用这本书作教材。不少会议要我去讲解?C/OS-II,一些公司邀我去为他们的技术人员做?C/OS-II的培训,尽管用的那些CPU我并不熟悉,共同学习并将?C/OS-II移植到一个自己不熟悉的CPU上 也是件非常有趣的事。
?C/OS-Ⅱ是一部出色的教材。书中不但给出了一个实时内核的全部源代码,而且对这些代码做了详尽的解释。书中还对实时操作系统中的一些基本概念做了详细的描述。源程序的写作风格、注释都相当漂亮、规范。商业软件不仅仅是贵,而即使有些软件带源代码一起出售,也没有哪一个解释的如此详尽。
?C/OS和?C/OS-Ⅱ是专门为嵌入式应用设计的,绝大部分代码是用C语言写的。CPU硬件相关部分是用汇编语言写的,总量约200行。汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU上。许多移植的范例可以从网站上得到。用户只要有C交叉编译器,就可以将?C/OS-Ⅱ嵌入到开发的产品中。
?C/OS和?C/OS-Ⅱ是占先式(Preemptive)多任务实时内核,是基于优先级的,即总是让进入就绪态的诸任务中优先级最高的那个任务先运行。每个任务都有互不相同的优先级。最多支持64个任务。所有?C/OS及?C/OS-Ⅱ提供的系统服务函数的执行时间都是可知的。除了一个函数以外,所有函数的执行时间都与任务数目无关。都不大于某一确定值。
?C/OS和?C/OS-Ⅱ的另一特点是可裁剪,即只嵌入用户程序用得着的那些函数,内核占用的ROM/RAM资源,可以依据产品调整。
“?C/OS-Ⅱ the Real Time Kernel”一书和其相应的中文本,书后所附的软件版本是?C/OS-Ⅱ V2.00。到2001年6月,网上出售的?C/OS-Ⅱ的源代码更新到了2.51。今年上半年,“?C/OS-Ⅱ The Real Time Kernel”一书的第2版又出版了,书中附了?C/OS-Ⅱ的最新版本V2.52。 最新版本的?C/OS-Ⅱ增加了一些有用的新功能,如互斥型信号量,事件标志等,新书在讲述?C/OS-Ⅱ方面增加了很多新内容,如介绍任务间的通讯与同步,新版书由原来的1章增加到了6章,特别是在移植?C/OS-Ⅱ一章中,介绍了移植后如何测试(详见 www.ucos-ii.com )。有关出版社正在联系购买版权的事,相信不久的将来新版?C/OS-Ⅱ的中译本就会在国内与读者见面。
在?C/OS和?C/OS-Ⅱ的学习与应用中听到最多的反映是两类问题,一类是关于移植,另一类是有关基于?C/OS-Ⅱ的应用程序。
关于移植,网上有40余种CPU移植的范例,包括8、16、32乃至64位CPU与DSP。从来自各方面的反映来看,移植难度并不在于?C/OS-Ⅱ本身,问题大多是由于C编译器不同引起的。而对于高校正在就读的研究生说来,困难还在于几乎所有单片机用的C编译器都是商业软件,有些还相当贵。我们遇到的问题是,某正版商业软件用得好好的,忽然这个公司没有了,新推出的单片机不支持了。
使用自由软件Linux 下的 GNU gcc 交叉 C 编译器作为开发工具来编译、移植?C/OS-Ⅱ是一个不错的选择。其意义决不仅限于节省开支,学习使用自由软件的过程实际也是打造IT 高手的过程。GNU gcc 支持几乎所有知名16位、32位CPU。
Linux 下自由软件好用,有强大的网上技术支持是公认的,GNU gcc 的使用难点不在于交叉编译器本身,而在于开发环境的配置。一旦系统开发环境建立起来了,会用了,从长远看还是很值得的。基于同一编译器,移植?C/OS-Ⅱ将变得没有什么可讨论的。
?C/OS-Ⅱ下的应用程序,问得最多的是关于TCP/IP 协议栈。虽然有相关商业软件可以买到,但对于确定的嵌入式应用,只用到CP/IP 协议栈其中一小部分时,我们仍主张自己写。Jeremy Bentham 著,“TC/PIP Lean Web Servers for Embedded System” (详见www.cmpbooks.com) 给出了使用8位单片机拨号上网的例子。书中介绍了如何写TCP/IP 协议栈,并附有C程序(该出中并没有使用任何TROS)。参考这本书,我们用Motorola 8位、16位和32位单片机实现了通过以太网接口芯片直接上网。网络协议可以在 www.rfc-editor.org 网站上找到。对于8位单片机68HC08,TCP/IP 部分目标代码只有7kb左右。对于68HC11/12、CPU32、ColdFire等16、32位单片机,写这一类程序时你就会发现,在RTOS ?C/OS-Ⅱ 支持下来做这件事是多么舒服。CPU要完成原来在控制系统中应该完成的任务,又要同时管理网络的发送和接受,没有实时操作系统支持简直不可想向。
RTOS是计算机专家们多年潜心研究的成果,使用RTOS不仅增加了嵌入式应用系统的可靠性,而且对关键事件的处理在延迟时间上有保证,即系统的实时性可以达到理论上可以达到的最优值。 RTOS支持多任务,应用程序被分解成多个任务,程序开发变得更加容易,便于维护,易读易懂,提高了开发效率,缩短了开发周期。而说到使用RTOS的缺点主要表现于RTOS本身要占用一定的资源,需要额外的ROM/RAM空间来运行RTOS本身。这对于一些内存十分有限、且只能工作在单片方式的单片机来说会受到限制。无论使用还是不使用RTOS,学习RTOS的基本思想都是必要的,即使您买了著名的商业RTOS,也不妨学习、研究一下?C/OS-Ⅱ这个小内核,会对用好那个商业RTOS有帮助。
RTOS是开发嵌入式产品的有力武器,RTOS的应用将推广到各个嵌入式应用的各个领域。学习RTOS,使用RTOS,我们全民族的微计算机嵌入式应用技术水平将会迈上一个新的台阶。