logo资料库

UML状态图的实用C/C++设计.pdf

第1页 / 共529页
第2页 / 共529页
第3页 / 共529页
第4页 / 共529页
第5页 / 共529页
第6页 / 共529页
第7页 / 共529页
第8页 / 共529页
资料共529页,剩余部分请下载后查看
UML 状态图的实用 C/C++设计 嵌入式系统的事件驱动型编程技术 第二版 Miro Samek anymcu@gmail.com 著 译 © Quantum Leaps, LLC www.state-machine.com
译者序 法国作家马赛尔·普鲁斯特(Marcel Proust)说:真正有所发现的航行不在于寻找一片新的风景, 而在于拥有一双新的眼睛。1 几年前,我常面对的一个问题是:我是不是需要改变一直沿用的顺序式程序架构?因为随着市 场的成长,产品需要更多的特征,更短的交货时间,更少的缺陷,更低的功耗,以及更少的成 本。而使用当时流行的 RTOS 并不能同时满足这些要求。这时我知道了 QP 并很快发现,基于 UML 状态机的 QP 框架可能是我需要的新架构。QP 架构以及在它后面的 UML,让我从新的角 度观察,分析然后高效并成功的实现了各种应用。 UML 本身非常庞大,学习 UML 并不是一件轻松的事,更不要说挑选 UML 中合适的工具去对 实际的问题进行并建模了。绝大多数 UML 书籍主要涉及概念,大型系统或数据库的开发等, 少数的几本涉及 UML 在嵌入式系统中应用的书又只关注某些厂商的辅助设计工具的应用。同 时,国内大多数嵌入式开发者具有很强的硬件开发的背景而非软件专业科班出身,难以把 UML 和手头的实际项目联系起来,对先进的 UML 建模方法论总有一种可望而不可即的感觉。 我已多次阅读 QP 代码以及本书,它让我深入理解并熟练的使用 UML 工具去解决我的实际问 题。同时它们本身也是作者崭新思维的产物,在我开发过程中思路阻塞时,我会阅读它们去寻 找灵感。我希望这本书也能带给你思维的飞跃,解决你的实际开发问题,实现具有竞争力的产 品。 我想借此机会感谢我的家庭,没有他们的支持和鼓励,对本书的翻译不可能完成。同时,我也 想感谢 BJHKHTDX 出版社的 HXB 先生以及他的编辑团队对我的信任和帮助。2 最后,我诚恳地希望广大读者对书中可能存在的翻译疏漏和错误给予批评和指正。我的联系邮 箱是 anymcu@gmail.com,我也会在 http://www.anymcu.com 上维护本书的一个勘误表。 CFH 2010年11月于深圳 1 The real voyage of discovery consists not in seeking new landscapes but in having new eyes. 2 由于本书未能在国内出版,特隐去出版社和编辑先生的信息。不过还是要多谢 H 编辑的帮助。译者 20140207
3实用 UML 状态图 C/C++实现,第二版 面向嵌入式系统的事件驱动编程  关注核心概念  提供一个完整的立即可用的开源软件架构  包括了一个使用 ARM Cortex-M3 的详尽的实例。 3 原书封面翻译件。
“这本书绝对是让我对状态机大开眼界。我最近使用(包含在本书内)的QP 框架改写了代码的 主要部分,它带来了奇迹。我以前的代码使用了许多传统的状态机,并很快演变成意大利面条 式代码。层次式状态机方法令新代码更小,更健壮,并且更易于维护和扩展。优秀的书和代 码!” ——Bob Bradley, Apple Computer, Inc., 4本书的目标人群为以下对事件驱动型编程和现代状态机感兴趣的软件开发者:  嵌入式程序员和顾问会发现一个完整的,立即可以用的事件驱动型构架,用来开发应用系 统。本书描叙了状态机编码策略,和同样重要的,一个与之配套的执行并发状态机的实时 框架。这两个因素是互补的,离开了对方,每个因素都不能发挥它的最大潜能。  寻求一个实时内核或实时操作系统的嵌入式系统开发者会发现,QP 事件驱动型平台可以 做到 RTOS 可以做到的任何事情,而且事实上,QP 包含了一个完全可抢占的实时内核和 一个简单的协作式调度器。  无线传感器网络等超低功耗系统的设计者会发现,如何把基于事件驱动状态机的解决方案 裁剪以适合最小的微控制器。超轻量级的 QP-nano 版本(第十二章)在仅 1-2KB 字节的 ROM 中融合了一个层次式事件处理器,一个实时框架和一个协作式或者完全可抢占式的 内核。  对于复杂性的应用,大规模的大型并行服务应用的设计者会发现,结合了层次式状态机的 事件驱动型解决方法很容易扩展,在管理非常大数目的状态化构件,例如客户任务方面, 它非常理想。可以证明,QP 的嵌入式设计理念对每个构件的时间和空间性能都提供了关 键的支持。  开源社区会发现 QP 辅助了其他的开源软件,比如 LINUX 或 BSD。QP 到 LINUX(和 POSIX 兼容的操作系统)的移植在第八章描叙。  使用 C 或 C++的图形用户界面开发者和计算机游戏程序员会发现 QP 很优雅的辅助了 GUI 库。QP 提供了高层的基于层次式状态机的“屏幕逻辑”,而由 GUI 库处理底层的窗口部件 (widget)并在屏幕上画图。  系统构架师会发现 QP 是大型自动化设计工具的一个超轻量化的替代。  自动化设计工具的用户会获得对他们使用工具的内部工作方法更深的理解。看到“帽子下 面”的内容会帮助他们更加自信的更有效的使用工具。 由于代码为中心的解决方法,本书主要吸引那些需要创建实际的可工作代码,而不是 仅仅建模的软件开发者。许多其他关于 UML 的书籍已经在描叙模型驱动分析和设计,以及其 他相关问题,比如软件开发过程和建模工具方面,做了很好的工作。 本书不提供另一个计算机辅助软件工程(CASE)工具。相反,本书讨论关于对层次式状 态机的实用的,可维护的编码技术,并使用一个实时框架把状态机和健壮的事件驱动型系统结 合起来。 Miro Samek 博士是 Quantum Leaps 公司的创始人和总裁,这是一家提供轻量化的基于状态机 的事件驱动型应用程序框架的开源公司。他是“Practical Statecharts in C/C++”第一版(CMP 出版社,2002)的作者,他为包括 C/C++Users Journal 在内的许多杂志撰写专栏,他是 Embedded Systems Conferences 的定期演讲者,并任职于 Embedded Systems Design 杂志 的编辑审查委员会。多年以来,他在多家硅谷公司从事嵌入式软件架构师的工作,在此之前他 是 GE Medical Systems (现在是 GE Healthcare)的一名嵌入式软件工程师。Samek 博士在 GSI(亥姆霍兹重离子研究中心,位于德国 Darmstadt)获得核物理博士学位。 4 原书封面翻译件。
5本书在 UML 高层次抽象概念和现代层次式状态机的实际编程实践之间架起了一座桥梁。本书 描叙了一个名为 QP 的轻量级开源的事件驱动型基础架构,它可以让用户不需使用大型工具, 就可以使用 C 或 C++语言对 UML 状态图和并发型事件驱动应用程序进行直接的手工编码。 本书由两部分组成。在第一部分,它通过多个可执行实例,从实际应用的角度描叙了传统的有 限状态机概念和现代的 UML 状态机概念,以及和每种状态机概念相对应的状态机编码技术和 状态机设计模式。在第二部分,它对一个可以把多个并发型事件驱动型状态机组合成健壮的应 用程序的通用的实时框架 QP 进行了详细的设计分析。QP 事件驱动型框架和传统的实时操作 系统 RTOS 相比有多个更加优异的特征。QP 的最简配置可以完全取代 RTOS 直接运行在裸的 微处理器或 DSP 上。QP 也可以在几乎所有 OS/RTOS 上工作,从而利用现有的设备驱动程序, 通讯堆栈和其他中间件。 然后它解释了轻量级可抢占型实时内核 QK。软件跟踪工具 QS 本身是一个强大的调试工具, 如果读者想了解如何实现一个复杂高效的通讯协议,它也是一个经典的学习范例。QP-nano 则 是事件驱动基础架构的超轻量级版本,它可以运行在低端的 8 位和 16 位 MCU 上。 本书的网站(www.state-machine.com/psicc2)提供了 QP 的源代码,对流行处理器和操作系统的移 植代码,以及在本书描叙的各种实例代码。 本书关注 UML 状态机的核心概念而不是那些一直在改变的具体工具,从而允许读者在不同的 项目中继续使用本书的知识。 本书为各种小型和大型的嵌入式系统提供了一个完整的立即可用的开源实时软件架构。 本书包括了一个使用 ARM Cortex-M3 的大型实例,并通过它着重强调了在日常编程活动中程 序员和架构师可能遇到的问题。 5 原书内容简介翻译件。
6嵌入式/编程/软件 实用 UML 状态图 C/C++实现 第二版 嵌入式系统的事件驱动型编程方法 使用本书,轻松实现从传统的顺序式编程到现代的事件驱动型编程的转变。 实用 UML 状态图 C/C++实现第二版,在 UML 的高层次抽象概念和现代的层次式状态机(UML 状态图)的实际编程实践之间架起了一座桥梁。本书描述了一个名为 QP 的轻量级开源事件驱 动架构。这个架构不需使用大型的工具,即可实现对 UML 状态图和并发型事件驱动应用程序 的手工编码。  理解状态机概念 从传统的有限状态机到现代的 UML 状态机  掌握编写状态机的技术和设计模式 使用各种可执行的实例学习  详解事件驱动编程的关键概念 包括控制的反转,阻塞和非阻塞代码,运行到完成(RTC)语义  让您彻底融入 QP 架构 QP 可以和绝大多数 OS/RTOS 一起工作,从而利用它们现有的驱动程序,通讯堆栈和其他中间 件  结合实际的学习网站 http://elsevierdirect.com/companions/9780750687065 本书的网站包括了 QP 完整的开源源代码,到 80x86,ARM Cortex-M3,MSP430 和 LINUX 的移 植代码,以及本书所有的实例代码。 Miro Samek 博士是 Quantum Leaps 公司的创始人和总裁,这是一家提供轻量化的基于状态机的 事件驱动型应用程序框架的开源公司。他是“Practical Statecharts in C/C++”第一版(CMP 出版 社,2002)的作者,他为包括 C/C++Users Journal 在内的许多杂志撰写专栏,他是 Embedded Systems Conferences 的定期演讲者,并任职于 Embedded Systems Design 杂志的编辑审查委员会。 多年以来,他在多家硅谷公司从事嵌入式软件架构师的工作,在此之前他是 GE Medical Systems (现在是 GE Healthcare)的一名嵌入式软件工程师。Samek 博士在 GSI(亥姆霍兹重离子 研究中心,位于德国 Darmstadt)获得核物理博士学位。 6 原书封底翻译件。
The real voyage of discovery consists not in seeking new landscapes but in having new eyes. --Marcel Proust
UML 状态图的实用 C/C++设计(第二版),版权 2002-2008 Miro Samek, 保留所有权利。 目录 目录........................................................................................................................................................ 前言........................................................................................................................................................ 本书第二版的新增内容................................................................................................................ 全新的代码................................................................................................................................ 开源和双许可证策略................................................................................................................ 用 C 语言作为主要的开发语言................................................................................................ 更多的实例................................................................................................................................ 支持可抢占式多任务调度........................................................................................................ 支持全面的测试........................................................................................................................ 超轻量级 QP-nano 版本............................................................................................................ 去掉了量子比喻........................................................................................................................ 使用 QP 所需的条件................................................................................................................ 目标人群.................................................................................................................................... 本书的网站................................................................................................................................ 致谢............................................................................................................................................ 介绍........................................................................................................................................................ 1 13 13 13 14 14 14 14 14 15 15 15 15 16 17 18 控制的倒置(Inversion of Control).................................................................................................... 18 18 事件驱动型框架的重要性............................................................................................................ 主动对象计算模型........................................................................................................................ 19 19 以代码为中心的开发方式............................................................................................................ 19 关注实际的问题............................................................................................................................ 20 面向对象........................................................................................................................................ 更加有趣........................................................................................................................................ 20 20 如何联系作者?............................................................................................................................ 21 第一部分 UML 状态机.................................................................................................................... 第 1 章 UML 状态机和事件驱动型编程技术初探........................................................................ 22 22 1.1 安装本书代码............................................................................................................................ 23 1.2 开始玩吧.................................................................................................................................... 1.2.1 运行游戏的DOS版本........................................................................................................ 24 25 1.2.2 运行游戏的 Stellaris 版本................................................................................................ 26 1.3 main() 函数................................................................................................................................ 1.4 “飞行和射击”游戏的设计........................................................................................................ 30 32 1.5 “飞行和射击”游戏中的主动对象............................................................................................ 33 1.5.1 Missile 主动对象................................................................................................................ 1.5.2 Ship 主动对象.................................................................................................................... 34 1.5.3 主动对象Tunnel.................................................................................................................... 37 1.5.4 Mine 构件............................................................................................................................ 38 保留中文简体翻译的全部版权 anymcu@gmail.com 2010 1
分享到:
收藏