源码公开的嵌入式系统软件资源
长期以来,价格因素限制了RTOS在我国嵌入式应用产品开发中的推广与普及。而随着操作系统走向开放,越来越多的带源代码的自由软件得到了广泛的认可与应用,其中最著名的是Linux。 Linux 不是实时的,于是出现了RTLinux, (详见 www.fsmlabs.com ) RTLinux 是实时的,但不是为嵌入式应用设计的。Linux 也不是为嵌入式应用设计的,于是出现了嵌入式Linux, 如uCLinux, (详见 www.uclinux.org ), uCLinux 在Linux基础上做了简化,去掉了多用户及虚拟内存管理等,适用于嵌入式应用类CPU,内核较Linux 小了很多,但仍有500kb之大。uCLiunx是为嵌入式应用设计的,但不是实时的。另一个著名的RTOS自由软件是RTEMS (Real-Time Executive for Missile Systems) 最初用于美国的导弹系统,(详见 www.oarcorp.com/RTEMS )OARCorp 的含义是On-Line Applications Research Corporation , TREMS是实时的,最初并不是为嵌入式应用设计的,是为多处理器应用设计的, C语言版本意为实时多处理系统,Real-Time Executive for Multiprocessor Systems (C Version),其ada语言版本后来扩展到军方其他应用,字母M的含义由导弹Missile 变为军事Military (ada Version) 。 RTEMS 可以用于嵌入式应用,但应为RTEMS总是要基于POSIX API 标准,嵌入到片上系统难度相当大。 这类自由软件出自于写Unix的专家里手,功能强,性能稳定可靠,虽然有源码,但因程序量大、版本多,非Linux高手难以掌握。且相应的内核较大,有数百K之多,不易裁剪至嵌入到单片机中去,以实现片上系统(SOC)。一些商业软件商将Linux 改头换面包装上市,于是出现了各种各样的阿猫阿狗Linux, 如blue cat Linux, Yellow dog Linux ……有些价格还不低。 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,我们全民族的微计算机嵌入式应用技术水平将会迈上一个新的台阶。