Lean计划
这是一本讲述TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)网络的实用书籍。你可以浏览这本书了解TCP/IP的概貌,也可以详细研究其中的某个部分,但是要想从中最大程度地获益,建议你建立自己的网络并实际试验书中提供的软件。
如果时间再早一点,我会给你详细介绍什么是因特网、它是如何让计算机之间通过TCP/IP协议簇传递信息的。现在,因特网已经进入了我们生活的方方面面,所以完全没有必要再介绍它了。但是一本关于TCP/IP的实用技术书还是非常必要的,因为因特网看上去如此庞大,这对于那些想理解其内部机制的人来说是一个很大的障碍。
我第一次试图实现TCP时不是很成功。看完了它的规范后,我曾想,“并不算太麻烦嘛。”又看了一些能够找到的公开领域的源代码,我认为它们写得太复杂了,然后我写了自己的实现。当我测试它时,问题马上出现了:找不到合适的测试软件。每当发现问题时,我不能确定引起错误的原因是测试工具、被测试的软件,还是我对规范的错误理解。
我需要下面这些东西:
* 一个我能理解的实现:不是一个在大型多用户操作系统中的实现,而是在一个小巧的系统中能够清楚体现其内在原理的实现。
* 我能使用的软件:这是指可以用来检查对协议的理解和实现的测试工具。
时光流逝,我的TCP/IP软件逐渐变得成熟,而Web技术也变得越来越重要了。我在工业界中的客户可以在家里或者办公室浏览网页,使用Web浏览器来控制和监视工业设备的优点显而易见。TCP成了一个传输网页的工具。这时问题的关键从“我要在系统上实现TCP/IP”变成了“我要让系统能生成网页”,而且这些网页总是包括动态的实时数据。
历史总是惊人的相似,用来产生动态网页的软件都是为大型多用户操作系统设计的,我找不到可以在简单的、低成本的嵌入式硬件上使用的小型实现。这时我需要的是:
* 对在网页中插入动态数据这类技术的说明。
* 可以根据项目的特点进行调整的简单而且平台无关的代码。
在实现了很多小型的Web服务器(通常是在拥有64K ROM的80188处理器上)后,我很高兴听到有一个在微控制器上的256字节的实现,尽管我失望地发现它只能从ROM中产生静态页面,没有动态数据。我想知道:
* 在微控制器上实现TCP和Web服务器需要做什么折衷。
* 用什么技术可以在网页中插入动态数据。
几乎是凑巧,这本书的第1版包括了一个运行在PICmicroㄉ系男⌒蚖eb服务器。我不是第一个创建这种服务器的人,但我是第一个把所使用技术包括全部源代码出版的。第一次的成功驱使我继续更新这本书以扩展PICmicro上支持的网络和协议的范围。除了本书标题中提到的“Web服务器”外,还有很多种在网络间传输数据的方法,我想提供使用这些方法的例子。
我衷心希望你可以在本书中找到你想要的答案。
嵌入式系统
尽管你在日常生活中每天都在使用嵌入式系统,但是“嵌入式系统”对你来说仍然可能是比较陌生的词语,需要做一些解释。微波炉、电视机、汽车、电梯和飞机都是用计算机控制的,它们不一定有显示屏、键盘和硬盘。计算机可能在你不知道的情况下控制着你的汽车:发动机管理系统从加速器接收信号并产生控制发动机的输出。
这些计算机嵌入在系统中,可能只是系统的一个小部件。嵌入式系统的设计者必须在尺寸、重量、能耗、震动、湿度和电磁干扰的严格控制下工作,除这些之外,还要考虑成本和可靠性。针对嵌入式系统的操作,PC体系结构已进行了调整,各个供应商也提供了各种不同的单板计算机(SBC),包括用来处理现实世界信号的各种必需的附加卡。对微控制器微型化的极限是在一个单独的芯片上实现一个完整的计算机,包括各种必需的I/O接口。
除了用户界面,大部分嵌入式系统还有一个用来进行状态监控和系统诊断的外部界面。传统上这是用串口终端的形式实现的,但在工业中逐渐发现了远程诊断的好处。因为Web浏览器广泛使用,所以它是用户界面的合理选择。从技术上讲,浏览器就是Web客户端,这就意味着嵌入式系统必须是Web服务器,本书的标题就是因此而来。
. 不管你是不是嵌入式系统开发者,我相信你会对本书中很多地方感兴趣,我会讨论:
* 需要什么软件部件;
* 这些部件如何工作;
* 清晰而简单的实现;
* 有效的测试策略。
简单和清晰很值得考虑。现在的编程工具包非常有用,因为它们可以简化复杂的编程任务,但这也造成代码臃肿,需要更复杂的硬件来支持,在这些方面你可能会输给竞争对手—因此Lean计划产生了。
硬件
在写作本书时,虽然PC硬件平台很容易过时,但不应轻易忽略。二手市场里到处都是各种完全可以使用的计算机,这些计算机没有使用最新最快的技术,但对普通人来说已经够用了。还有低成本的工业单板机,它们拥有个人计算机的内核,标准的网络接口和有能力接收各种现实世界信号的接口卡。
我的软件可以在所有PC兼容设备上运行,稍加修改后甚至可以在与个人计算机不兼容的设备(例如80188处理器)上运行,因为我已经把所有依赖于硬件和操作系统的代码分离出来了。
除了个人计算机上的代码外,我还包括了一个小型的TCP/IP协议栈和一个在PICmicro微控制器上使用Custom Computer Service PCM C编译器的Web服务器。你可以手工修改标准的PICmicro测试板,加入适当的外围设备(前提是有电路图),或者购买现成的电路板。我没有说这个软件可以很容易地移植到其他处理器上,但书中深入分析了与微控制器具体实现产品相关的各种困难,在你使用其他处理器时,它能给你很好的入门帮助。
网络
10兆以太网仍然在广泛使用,可以从零售商那里花很少的钱买到完整的工具,包括网卡和网线。我的软件支持其中两种最流行的以太网卡—Novell NE2000兼容卡和3COM 3C509网卡,虽然(如果使用Boland编译器)可以通过包驱动接口支持其他网卡,但使用直接硬件接口的方法更合适,因为这样更容易进行试验和调试。
在开发网络软件时,我强烈建议你使用一个和其他网络完全隔离的单独网络,这样不仅使调试变得更容易,而且避免了扰乱其他网络通信。一个小小的改动可能会造成网络通信量的显著增加,并对其他网络用户造成干扰。这一点我已经警告过你了!
这个软件也支持通过SLIP(Serial Line Internet Protocol,串行线路网际协议)串口连接,两台通过交叉线连接起来的计算机也可以在一定程度上代替真的网络来使用。
操作系统
你可能会奇怪我如此忽略了操作系统,在嵌入式系统市场上,总是有很大的压力要简化硬件,减少成本,而做到这一点的一种方法就是尽量使用最简单的操作系统,或者根本不用操作系统。
对那些执着于复杂操作系统和对复杂软件开发环境更感兴趣的人,刚开始可能是不太舒服的体验,因为你要面对的是直接在硬件上编程。然而,我希望你很快能够喜欢这种方法的强大、灵活和简单,并逐渐认识到那些常用的复杂应用程序和操作系统(即使是免费的操作系统)是很奢侈的。尽管奢侈,我还是使用了我的台式计算机进行开发,所以这个软件是与Windows 95和98兼容的,可以在DOS、DOS扩展模式或Win32控制台应用程序模式下运行。
我主要的开发系统是一台装有Windows 95的机器,上面安装了两块网卡,其中只有一个是安装在操作系统中的。这非常有用,因为这台机器可以同时作为网络客户端(使用标准的Web浏览器)和服务器(使用我的Web服务器),使得试验很简单。
最终的目标机器可以是相对便宜的运行DOS的单板机,或是和PC代码兼容的没有安装操作系统的微控制器,但后者可能需要对所提供的软件做一些小小的改动。
开发环境
这个软件支持下列4个PC编译器:
Borland C++ v3.1 基于Dos的编译器,带有集成开发环境。
Borland(Inprise)C++ v4.52 基于Windows的编译器,可能是能生成Dos可执行文件的最新版本。
Microsoft Visual C++ v6 基于Windows的编译器,可以生成Win32控制台程序。
带有RHIDE v1.4的DJGPP v2.02 GNU工程的一部分,这是Borland 3.1开发环境的一个很好的克隆,运行在32位DOS扩展模式下,可以免费下载。
Borland编译器虽然好像已经过时了,但还是可以在一些C语言编程教科书的随书光盘中找到,也可能捆绑在它们的32位更高版本中。高层软件可以使用所有这些环境编译,但对低层的网络接口代码就没这么幸运了。
* Borland编译器最容易使用,因为它们不需要插入机器代码就允许中断,所以可以支持所有的网络接口。
* 使用Microsoft的编译器,可以支持网卡和SLIP接口,但不支持数据包驱动程序接口。
* 使用DJGPP编译器时只支持直接网卡接口。
直接网络接口是最容易调试的,因此更适合用来进行试验,它的限制不像看起来那么多。
如果你喜欢的编译器不在上面的列表中,我为这个疏忽而道歉,但不大可能再加进去,因为加入每个编译器都需要大量的调试,但我倾向于减少而不是增加支持的编译器的数量。如果你的编译器和上述的某个类似(例如,一个更早的版本),你几乎不用做什么工作,但我不能对我没有试验过的编译器做出评论。
PICmicro编译器
早期的软件使用Custom Computer Service(CCS)PCM v2.693,但后来的开发与PIC16XXX和PIC18XXX系列的CCS和Hitech编译器广泛兼容。关于兼容性的讨论不在本章范围内。参考附录D和软件的版本说明可以获得更多的信息。
软件
本书的附带光盘中包含了所有的源代码以方便进行试验。然而,作者保留这些软件的全部版权,它们只能和本书一起发布,例如,你不得把任何源代码发布到因特网上,或者通过摘取其中部分代码或修改版权说明来篡改它的著作权。
如果你想出售包含该软件的产品,对每个商业产品都需要“加入”该软件的许可。这通常会采用一次付款的方式,允许对从本软件产生的可执行代码进行不受限制的合成,没有额外的开发费用(除了购买本书的费用)。为了鼓励商业使用,许可费用也很低。全部的细节和软件更新可以从Iosoft 有限公司的网站www.iosoft.co.uk获得。
感谢
作者向CMP Books出版社的Berney Williams对本书表现出的热情表示感谢;对Anthony Winter的审阅和建议表示感谢;对Acrom控制系统有限公司的Glen Middleton和Io 有限公司的Adrian Nicol给予的硬件上的支持表示感谢;除此之外,对Jane McSweeney(现在是Jane Bentham)持续的热情支持表示感谢。