本书是集作者多年经验、精心编著的建立实时嵌人系统的—本实用的指导书。内容包括设计开发实时系统、软件的安装与设置、调试、键盘和屏幕I/O、文件系统、中断、时钟、智能UPS、多任务、网络、与Web连接、Java、浮点编程、动态链接库、固化应用程序等。本书几乎涵盖了实时系统开发的各个层面,内容由浅人深,可读性高。\r\n\r\n 本书适合实时系统软、硬件设计开发人员及大专院校师生阅读。\r\n\r\n \r\n
\r\n
引 言 \r\n\r\n 第1章 法入系统介绍 \r\n\r\n 1. 1 实时系统 \r\n\r\n 1. 2 实时嵌入系统 \r\n\r\n 1. 3 嵌入处理器 \r\n\r\n 1. 4 PC嵌入系统诞生 \r\n\r\n 1. 5 小结 \r\n\r\n 第2章 设计和开发实时系统 \r\n\r\n 2. 1 一个实用的方法 \r\n\r\n 2. 2 迭代方法 \r\n\r\n 2. 3 分桥阶段 \r\n\r\n 2. 4 设计阶段 \r\n\r\n 2. 5 一些决定 \r\n\r\n 2. 6 实现阶段 \r\n\r\n 2. 7 实现设计 \r\n\r\n 2. 8 小结 \r\n\r\n 第3章 软件的安装与设置 \r\n\r\n 3. 1 选择平台和工具软件 \r\n\r\n 3. 2 Too1Suite部件 \r\n\r\n 3. 3 ToolSuite缩略版 \r\n\r\n 3. 4 ETS内核应用程序环境 \r\n\r\n 3. 5 硬件安装 \r\n\r\n 3. 6 软件安装和设置 \r\n\r\n 3. 7 配置Visud C++和Developer Studio \r\n\r\n 3. 8 编程项目 \r\n\r\n 3. 9 小结 \r\n\r\n 第4章 调试 \r\n\r\n 4. 1 软件调试器 \r\n\r\n 4. 2 硬件调试 \r\n\r\n 4. 3 软件仿真器 \r\n\r\n 4. 4 用Too1Suite工具调试 \r\n\r\n 4. 4 嵌入StudioExpress扩充功能 \r\n\r\n 4. 5 小结 \r\n\r\n 第5章 收款机 \r\n\r\n 5. 1 POS系统是如何工作的 \r\n\r\n 5. 2 设计仿真系统 \r\n\r\n 5. 3 建立POS项目 \r\n\r\n 5. 4 运行POS项目 \r\n\r\n 5. 5 概览源代码 \r\n\r\n 5. 6 小结 \r\n\r\n 第6章 键盘和屏幕I/O \r\n\r\n 6. 1 按键. 小键盘和键盘 \r\n\r\n 6. 2 LED. LCD和显示器 \r\n\r\n 6. 3 ETS内核的键盘和屏幕I/O支持 \r\n\r\n 6. 4 POS项目中的代码 \r\n\r\n 6. 5 小结 \r\n\r\n 第7章 文件系统 \r\n\r\n 7. 1 选择文件系统 \r\n\r\n 7. 2 选择存储设备 \r\n\r\n 7. 3 ETS内核文件系统 \r\n\r\n 7. 4 POS项目中的I/O \r\n\r\n 7. 5 小结 \r\n\r\n 第8章 一个简单UPS \r\n\r\n 8. 1 设计仿真 \r\n\r\n 8. 2 建立UPS项目 \r\n\r\n 8. 3 源代码概述 \r\n\r\n 8. 4 小结 \r\n\r\n 第9章 中断 \r\n\r\n 9. 1 中断如何工作 \r\n\r\n 9. 2 ISR基础 \r\n\r\n 9. 3 PC体系上的中断 \r\n\r\n 9. 4 ETS内核下的中断处理 \r\n\r\n 9. 5 UPS项目中的中断 \r\n\r\n 9. 6 小结 \r\n\r\n 第10章 时钟 \r\n\r\n 10. 1 时钟的应用 \r\n\r\n 10. 2 选择时钟硬件 \r\n\r\n 10. 3 软件考虑 \r\n\r\n 10. 4 ETS内核时钟 \r\n\r\n 10. 5 UPS项目中的时钟 \r\n\r\n 10. 6 小结 \r\n\r\n 第11章 智能UPS \r\n\r\n 11. 1 智能UPS如何工作 \r\n\r\n 11. 2 设计仿真 \r\n\r\n 11. 3 生成智能UPS的执行程序 \r\n\r\n 11. 4 运行智能UPS执行程序 \r\n\r\n 11. 5 概览源代码 \r\n\r\n 11. 6 小结 \r\n\r\n 第12章 多任务 \r\n\r\n 12. 1 过程和多过程 \r\n\r\n 12. 2 线程和多线程 \r\n\r\n 12. 3 过程与线程 \r\n\r\n 12. 4 调度 \r\n\r\n 12. 5 同步 \r\n\r\n 12. 6 任务间的通信 \r\n\r\n 12. 7 中断处理 \r\n\r\n 12. 8 选择实时操作系统 \r\n\r\n 12. 9 调试 \r\n\r\n 12. 10 智能UPS中的线程 \r\n\r\n 12. 11 小结 \r\n\r\n 第13章 串行I/O \r\n\r\n 13. 1 串行I/O的基础知识 \r\n\r\n 13. 2 RS—232C串行标准 \r\n\r\n 13. 3 外设串行总线 \r\n\r\n 13. 4 芯片间的串行总线 \r\n\r\n 13. 5 智能UPS中的串行I/O \r\n\r\n 13. 6 小结 \r\n\r\n 第14章 网络版UPS \r\n\r\n 14. 1 网络版UPS是如何工作的 \r\n\r\n 14. 2 设计仿真 \r\n\r\n 14. 3 生成网络版UPS项目 \r\n\r\n 14. 4 运行网络版UPS项目 \r\n\r\n 14. 5 源代码概览 \r\n\r\n 14. 6 小结 \r\n\r\n 第15章 网络 \r\n\r\n 15. 1 网络概念 \r\n\r\n 15. 2 嵌入系统的联网 \r\n\r\n 15. 3 TCP/IP网络的实现 \r\n\r\n 15. 4 针对ETS内核的网络编程 \r\n\r\n 15. 5 小结 \r\n\r\n 第16章 与Web连接 \r\n\r\n 16. 1 嵌入应用的HTTP \r\n\r\n 16. 2 HTTP协议 \r\n\r\n 16. 3 Web服务器 \r\n\r\n 16. 4 嵌入程序中的HTML \r\n\r\n 16. 5 动态HTML \r\n\r\n 16. 6 ETS内核HTTP服务器 \r\n\r\n 16. 7 网络版UPS中的在线HTML \r\n\r\n 16. 8 小结 \r\n\r\n 第17章 Java \r\n\r\n 17. 1 语言和平台 \r\n\r\n 17. 2 嵌入开发的优点 \r\n\r\n 17. 3 Java的局限 \r\n\r\n 17. 4 支持Java的不间断电源系统 \r\n\r\n 17. 5 小结 \r\n\r\n 第18章 浮点编程 \r\n\r\n 18. 1 科学计数法的术语 \r\n\r\n 18. 2 嵌入系统支持的浮点运算 \r\n\r\n 18. 3 浮点数据格式 \r\n\r\n 18. 4 浮点硬件和浮点软件 \r\n\r\n 18. 5 位图过滤器 \r\n\r\n 18. 6 小结 \r\n\r\n 第19章 动态连接库 \r\n\r\n 19. 1 什么是DLL \r\n\r\n 19. 2 使用DLL的优点 \r\n\r\n 19. 3 使用DLL的缺点 \r\n\r\n 19. 4 在ETS内核下应用DLL \r\n\r\n 19. 5 ENCDEC编程项目 \r\n\r\n 19. 4 小结 \r\n\r\n 第20章 C++异常和结构异常 \r\n\r\n 20. 1 异常处理的作用 \r\n\r\n 20. 2 嵌入系统中的异常处理 \r\n\r\n 20. 3 C++异常处理 \r\n\r\n 20. 4 结构化异常处理 \r\n\r\n 20. 5 可重新启动的UPS \r\n\r\n 20. 6 小结 \r\n\r\n 第2l章 固化应用程序 \r\n\r\n 21. 1 在嵌入系统中应用ROM \r\n\r\n 21. 2 ROM的类型 \r\n\r\n 21. 3 PROM编程 \r\n\r\n 21. 4 调试ROM中的程序 \r\n\r\n 21. 5 PC引导方法 \r\n\r\n 21. 6 TOOLSUITE对ROM的支持 \r\n\r\n 21. 7 小结 \r\n\r\n 附录A 硬件资源指南 \r\n\r\n 附录A. 1 单板机(单板机) \r\n\r\n 附录A. 2 硬件调试工具 \r\n\r\n 附录B API \r\n\r\n 附录B. 1 C运行库函数 \r\n\r\n 附录B. 2 WIN32API \r\n\r\n 附录B. 3 WINSOCKAPIS(Windows套接应用程序接口) \r\n\r\n 附录B. 4 内核API \r\n\r\n 附录C 配置Windows串行连接 \r\n\r\n 附录C. 1 哑调制解调器电缆技术规范 \r\n\r\n 附录C. 2 安装直接连接驱动程序 \r\n\r\n 附录C. 3 安装拨号网络 \r\n\r\n 附录C. 4 创建拨号网络连接 \r\n\r\n 附录D 实时和嵌入系统的开发方法论 \r\n\r\n 附录D. 1 OCTOPUS \r\n\r\n 附录D. 2 ELLISON \r\n\r\n 附录D. 3 OBJECTGEODE \r\n\r\n 附录D. 4 ROOM \r\n\r\n 附录D. 5 SHLAER—MELLoR \r\n\r\n 附录D. 6 K—FLOW和GOO \r\n\r\n \r\n
\r\n
本书是建立实时嵌入软件的一本实用的. 手把手教授的指导书籍. 可直接阅读. 不少书籍采用高层的理论方法来讨论实时嵌入系统的开发, 有些教科书则从具体硬件入手, 着眼于并非典型硬件的应用程序开发. 然而, 很少有书籍着眼于实时嵌入软件的开发.
我们理解, 为何人们总是一直倾向于这两种极端. 这是因为标准的硬件, 标准的开发工具以及标准的操作系统的缺乏在实际上要求作者要么追祟理论. 要么着重硬件.
然而, 事物总是在变化的. 随着市场的抢占变得越来越重要, 嵌入系统的开发者开始更多地转向成品板卡和成品部件. 尤其是PC体系, 由于其价格优势, 标准化的接口以及众多的供应商, 已是中. 低规模产品的一个有吸引力的选择.
这种转变, 即一种标准化的同时又被开发者广泛使用和了解的平台的出现, 使我们能够开拓出一块不大不小的根据地:一本着重于实时嵌入应用程序开发的软件问题的书籍. 从一开始, 我们就立足于通常的一些编程课题, 如设计, 开发和调试实时嵌入应用程序. 告诉你如何实现实时嵌入应用程序中的中断. 时序. 线程等等. 所有的论题都有代码样例. 由于你很可能已经非常熟悉PC体系了, 同时由于该体系已被透彻地研究且技术资料完备, 我们不花时间去讨论其硬件细节(你也不要去费时). 由于无论是主机还是目标平台都是基于PC的, 你想必具备所有着手工作所需的硬件, 不必费时花钱去自己构建硬件.
使用标准硬件至少有一半的好处是可使用标准软件. 这就是为什么有了Phar Lap Software公司的TodSuiteLite软件. 随书所附的光盘上的To01SuiteUte是PharLap公司的TNTEmbeddedToo1Suib, RealtimeEdition(嵌入开发软件的实时版)的一个限制版本. INT EmbeddedTo01Suite支持现成的一些编译器和开发工具软件, 使你能用PC体系来建立配置实时嵌入应用程序.
注: 据Microsoft VisualC++6. 0PrograIMler’sGuide(Microsonkess, 1998)(Microsoft VisualC++6. 0程序员指南, 1998年版)称, 随着V1sualC++6. 0的发行, Microsoft公司不再区分V1sualC++产品和DeveloPer Studio, 即集成开发环境(圆E), 并把两者都称为VC++. 不过, 为讨论起见, 我们仍然将VisualC什6. 0中的mEgl做Developr Studio.
因为学习编程的最好方法就是动手编写, 所以我们将I. M1Suite随书附上. 用光盘上的软件(即MicrosoftVisualC++的一个拷贝), 两台PC兼容机和一根Laplink兼容的电缆(一种标准的串行电缆—译注), 你就可以建立, 运行和调试本书中的所有编程项目.
1. 本书适合你吗
本书是否只针对PC和Win32开发者?完全不是. 我们还得选择具体的硬件和软件平台, 这样才能真正地建立和运行本书中的嵌入程序. 但你可应用这里讨论的嵌入系统开发的原理于任何嵌入产品的设计和开发中, 而不管你使用的是那种处理器, 实时操作系统和软件工具.
如果你属下列之一, 你会发现本书是有价值的:
1)嵌入系统的新手或对其有一定经验的程序员, 并想全面了解和掌握嵌入软件的开发.
2)至少熟悉一种视窗操作系统的程序员, 从未涉足过实时嵌入系统的编程, 并想直接体验这类编程.
3)在非Intel硬件上工作的程序员, 并想顺便尝试这种被Too1Suite所支持的可嵌入PC系统.
4)手头正有一个软/硬件的项目要做的程序员. 你怀疑该项目的实现方案应属某种嵌入系统之类, 但你不知道如何将你的想法付诸现实.
5)工程或科学学科类的学生或教师, 希望建立些需要计算机控制的项目.
6)已经熟悉Too1Suite的人, 并想获得Too1Suite技术资料中给出的样板的辅助.
7)仅因兴趣想研究嵌入系统的好奇者.
我们只有一个前提. 你应熟悉C编程语言, 这样你才能读懂源代码(大多数例子是用C写的)和了解程序在如何运行. 有些项目部分地用C++编写, 而且其中一个编程样例还含Java程序. 尽管如此, C是唯一的要求. 不过, 有C++. Win32API(应用程序编程接口)以及Java的知识会占先手.
2. 嵌入系统:浪潮?有过之而无不及
现有的嵌人系统的数量之大. 种类之多, 使人不可能不卷入嵌入系统的发展潮流. 你的可编程微波炉是一个嵌入系统, 你的录象机是一个嵌入系统. 你的电视遥控板是一个嵌入系统. 如果你的电视可编程, 那它也是一个嵌入系统.
可以期望嵌入系统的潮流会持续下去. 在1996年9月版的Computer Design杂志中, Ray weiss写了一篇题为“Embedded Advancesin Auto, Communication, Office, Industry, and Consumer Markets”(嵌入系统在汽车. 通信. 办公. 工业和消费市场中的进展)的文章.
Weiss依据Motoro1a公司发布的信息写道:1990年的汽车平均含14个微处理器, 到2000年, 该数值有望达到35.
再把这股潮流与另一股甚至更难回避的潮流(即野火般蔓延的Intemet)汇合, 前面提到的那篇ComputerDesign杂志的文章还有如下之说:
随着家庭接入为机顶盒提供的先进的数字服务, 家用机顶盒和通过ISDN或更高的家庭接入连接技术, 如8兆位的ADSL(非对称数字用户线), 大有促使通讯增长的洛力. 有望很快会将这些盒子集成到电视机中. VMEbus(一种互连总线系统, 由Motoro1a公司为首的一个联盟所开发—译注)和基于PC的系统, 作为这类应用的系统基础, 有望扮演主要的角色.
机顶盒. 路由器. 调制解调器, 一句话, Inremet的基础设施都是嵌入系统, 这正好进一步支持我们的期望:嵌入系统将越来越流行.
虽然, 嵌入市场的增长主要是由于嵌入系统的新应用和新应用程序, 但微处理器的进展也为其添了柴火. 处理器的速度, 总线宽度的提高, 以及制造商能集成到一个芯片上的外设数量的加大都增加了嵌入系统可用芯片的种类, 以及其对更广应用的适应能力. 田SC芯片(RISC是一种使指令. 地址模式以及编译器设计都能简化的处理器技术—译注)在高端嵌入应用中现在已是常见的了, 甚至在不算很高档的应用中也如此, 这可从诸如电子游戏之类的消费型电子产品中看出. 例如, Sega Saturn(Sega公司的一种电子游戏机)就有3个32位的Hitachi SH RISC处理器. 小型. 可嵌入. 完全基于PC的板卡是中等规模系统中常见的. 而超小型的微处理器则统治低端系统. 例如Parallax公司的BASIC Stamp就是一个基于Microchip公司的PIC(一种主要用于个人智能通信上的)超小型微处理器系列的开发系统, 它包括一个BASIC解释器, 可从你的桌面PC上编程, 并由两块芯片和少量的无源器件构成.
嵌入系统无处不在. 如果你要像我们一样, 你就要知道如何使用这些材料, 以免在一个你不懂的技术之上绊倒.
3. 实时嵌入系统
对嵌入系统所作的所有这番讨论, 都没考虑我们即将谈到的. 这类应用的一个重要方面, 即实时. 我们已经看到的一些实时系统的定义会把每个嵌入系统划为实时系统. 那些定义把实时系统划分为一个与真实世界活动(按键. 温度监视. 移动机械手等等)相互作用的系统. 这样的定义正确, 但不完整.
完整的定义可等到以后给出. 眼下要注意的是我们所涉及的不仅仅是嵌入系统的开发, 而且涉及到实时铁人系统的开发. 事实上, 当我们在本书中谈到“嵌入”时, 我们意指实时嵌入. 实时系统在嵌入系统中占相当大的比例, 它们通常完成些临界性的, 对时序敏感的功能:许多嵌入系统都要求有实时性能. 你汽车中的防抱死系统(ABS)就是一个很好的例子. 当你把脚放在刹车上时, 你希望刹车立即响应. 如果ABS这时决定去整理某些破碎的记亿, 而不是响应, 那么稍后就有比存储记忆更多的东西会破碎(风趣地指出车祸一译注). 本书将讨论到如何决定你的项目是否需要实时功能, 以及(若需要的话)如何实现它.
4. 本书的内容安排
本书并不对软件开发作高层而抽象的讨论. 相反, 我们着眼于实时嵌入软件开发中的实在的方面. 这必然导致你去涉及一些低层的细节. 例如, 讨论多线程的来龙去脉:什么时候多线程是或者不是个好主意, 如何管理线程的优先级以及如何同步线程. 我们也研讨中断处理程序的建立, 研讨如何控制串行端口, 如何使用程序中的定时器等等.
我们使用教学样例或项目实例来阐明本书中的所有概念. 我们选择的项目包罗日常的一些编程任务, 并暴露那些你日后将遇到的. 富有挑战性的困难. 然而, 正如我们在第1章中所指出, 嵌入软件同嵌入硬件密切关联, 事实上, 其关联是如此的密切, 以至于在开发时它俩缺一不可. 通常, 你应先着手开发软件, 或者与硬件平行进行. 要使软件的开发上路, 嵌入系统的程序员就要做些硬件的仿真工作, 这样他们才能在最终硬件未到位时能运行和调试他们的软件.
建立硬件仿真是你在本书的编程项目中要做的工作. 对此, 我们有实在的理由:我们的项目都是你在真实生活中能碰到的实际的(尽管作了简化的)嵌入系统, 正因为如此, 它们需要PC上不具备的一些专门的硬件. 因此, 我们要仿真那些不存在的硬件来让程序运行下去. 我们还有一个有启发性的意图, 就是要让你明确:仿真对嵌入系统的开发很关键.
为我们的项目建立硬件仿真使我们能够示范这项技术.
不过, 在你的硬件可在硬件仿真平台上运行后, 你必须将其移植到目标平台上. 在讨论项目的每一章中的一个标题为“超越仿真”的附加论题中, 我们会告诉你项目需要作什么修改.
在你着手建立项目前, 你需要安装Too1Suite Ute软件. 我们在第3章“软件安装与设置中教你如何做这项工作. 我们还给出了一个简单的嵌入版的程序, Hello—Word, 来让你体验一下编译一个程序, 将其下载到目标以及运行程序的来龙去脉. 第4章“调试”, 将涉及嵌入开发的调试方案, 而后教你如何用Microsoft的Developer Studio调试器来调试样例项目.
HelloWord程序之后是第5章中的一个收款机(POS)终端的应用实例(即一个聪明的现金收款机, 就象你在百货商场见到的那种). 我们仿真的是一个PoS机, 你可输入SKU号(库存单位号), 输入数量, 以及从假想库存中调出信息.
从POS机出发, 你进到第8章中的一个更为雄心勃勃的项目, UPS仿真. 实际上, 你仿真的是一个UPS的大脑, 但该模仿是如此的逼真, 以至于你可模拟断电, 并目睹这个UPS如何响应. 在第11章和第14章中, 你对这个UPS添加一些功能(即:使其更聪明), 将其配备成具有生成HTML网页的能力和通过网络与网上浏览器通讯的能力的程度.
本书中最后的三章包括一系列较小的, 能阐明些其他概念的编程项目. 然而, 我们希望这类项目不会在此到头, 希望你把这些例子作为自己更精细的项目的一个跳板.
在讨论项目的每一章之后, 我们都接上几章, 讨论在那个项目中所阐述过的一些特定的编程论题和技术. 例如, 在第5章中的POS机项目阐述了在嵌入系统中实现键盘I/O, 屏幕y0和文件系统, 第6章和第7章就深人地研究这些论题. 着眼于论题的每一章的前半部分都对课题作了一个深入讨论, 这样你就能够将这些知识用于你所选择的任何平台上. 在其后半部分, 我们研究编程项目中生成的代码, 这样你就能使所启用的代码在PC和ETS Kern1(嵌人目标系统内核)平台上运行.
以下是我们将讨论的一些课题.
中断
你将看到如何编写中断服务子程序, 正确地在你的应用程序中使用中断, 以确保实时响应性.
定时器
你将看到如何设置和响应软件时钟, 从而完成同步操作.
I/O端口
由于串行通讯是如此的流行, 我们采用对串行端口编程来与其他系统通讯, 从而阐明硬件外设的I/O.
多任务
多个任务和并发任务构成了许多实时嵌人系统的心脏. 我们向你介绍编写多任务应用程序的一些有利之处, 同时也介绍些富有挑战性困难.
网络连接
联网对于许多的嵌入系统已越来越重要了. 我们对网络作一般性讨论, 并细致地探讨TCP/IP方案. 然后, 我们通过PPP(点对点)网络连接来实现一个运行ETS内核的嵌入PC和一个Windows机器之间的联网.
HTTP服务器
在嵌人产品中包括一个HTTP服务器是能让一种几乎任何上网的人都能拥有的标准程序, 即网上浏览器, 来远程监视和配置你的嵌入系统的一个很棒的方法. 我们讨论HTTP协议如何工作, 并教你如何轻松地将HTTP服务器建到一个ETS内核应用程序中去.
我们也介绍些其他的技巧和技术, 如把应用程序烧结到ROM中, 这是与实时嵌入开发相关的.
5. 硬件和软件要求
随附的光盘含ToolSuite和本书中所有样例程序的完整源代码. 要运行Too1Suite, 你的开发主机必须是486或以上的PC, 并运行Windows 95. 98或NT. 要编译本书中的程序或写新软件, 你需要一套Microsoft的VirtualC++5. 0或以上版本的软件. (有关ToolSuiteLite的部件列表, 参见第3章).
对运行嵌入程序的目标计算机, 你需要一台386或以上的PC并带BI0S, 一个软盘驱动器. 一个显示器. 一个键盘以及串口和并口. 有浮点协处理器更好, 但不要求.
你还得有一根Laplink兼容的并口电缆用于下载和调试应用程序. (如果有必要, 你可使用串行电缆, 但在并口电缆上下载和调试程序更快. )对于使用TCP/IP联网的简单程序, 你需要一根Laplink兼容的串行电缆作网络连接.
在建立好你的系统后, 你可运行本书中的程序, 可扩展和重建程序, 或者从头写你自己的嵌入程序. 好了:卷起你的袖子, 扑进去, 玩个开心.