《嵌入式系统的微模块化程序设计 实用状态图C/C++实现》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:(美)MirosamiekPHD著;敬万钧,陈丽蓉译
  • 出 版 社:北京:北京航空航天大学出版社
  • 出版年份:2004
  • ISBN:7810774158
  • 页数:327 页
图书介绍:本书给出相关概念清晰而明确的描述,包括传统的有限状态机和状态图,以及基于状态图的设计模式;给出了可运行代码,使读者能通过实际操作来学习量子编程,以及学到状态嵌套如何导致行为继承和如何通过按差异编程而实现重用等。

第1部分 状态图 3

第1章 量子编程的快速浏览 3

1.1 终结钩子——GUI应用程序的剖析 3

目录 3

1.2 程序设计的更好办法——一个计算器的工作 5

1.2.1 传统的事件动作范型的缺点 5

1.2.2 计算器状态图 7

1.2.3 同Windows集成 11

1.2.4 状态处理器方法 13

1.3 面向对象相似性 15

1.3.1 状态层次和类分类学 15

1.3.2 进入/退出状态和初始化/结束类 16

1.3.3 按差异编程 16

1.3.4 行为继承作为基本的元模式 16

1.3.6 重构状态模型 17

1.3.5 状态模式 17

1.3.7 超越面向对象编程 18

1.4 量子类比 18

1.5 小结 18

第2章 状态图速成 21

2.1 有限状态机的本质 21

2.1.1 状态 21

2.1.2 扩展状态 21

2.1.3 监测器 22

2.1.4 事件 23

2.1.5 动作和转换 23

2.1.6 Mealy和Moore自动机 24

2.1.7 执行模型——RTC步 24

2.1.8 状态转换图 25

2.2.1 层次式状态 26

2.2 UML状态图的本质 26

2.2.2 行为继承 28

2.2.3 正交区域 29

2.2.4 进入和退出动作 30

2.2.5 转换执行序列 32

2.2.6 内部转换 33

2.2.7 伪状态 33

2.2.8 细化事件处理 34

2.2.9 语义与表示法 34

2.2.10 状态图和流程图 35

2.2.11 状态图与自动代码综合 36

2.3 状态模型的例子 37

2.3.1 量子计算器 37

2.3.2 氢原子 41

2.4 小结 44

3.1 状态机接口 46

第3章 标准状态机实现 46

3.2 嵌套的switch语句 48

3.3 状态表 51

3.4 状态设计模式 56

3.5 优化的FSM实现 60

3.6 状态机和C++异常处理 64

3.7 成员函数指针的作用 65

3.8 实现监测器、接合和选择点 66

3.9 实现进入和退出动作 67

3.10 处理状态层次 68

3.11 小结 69

第4章 实现行为继承 71

4.1 结构 71

4.1.1 事件 74

4.1.2 状态 76

4.1.3 进入/退出动作和初始转换 77

4.1.4 状态转换 79

4.1.5 top状态和初始伪状态 80

4.2 一个注释性例子 81

4.2.1 枚举信号和子类构作QHsm 82

4.2.2 定义状态处理器方法 83

4.2.3 初始化和分发事件 86

4.2.4 测试运行 87

4.3 试探和约定 89

4.3.1 构建状态机代码 89

4.3.2 选择正确的信号粒度 91

4.3.3 UML一致的HSM 91

4.4 事件处理器 93

4.4.1 初始化状态机:init()方法 93

4.4.2 分发事件:dispatch()方法 95

4.4.3 静态和动态状态转换:宏Q_TRAN和Q_TRAN_DYN() 96

4.4.4 动态状态转换:tran()方法 97

4.4.5 静态状态转换:tranStat()方法和Tran类 102

4.4.6 初始化QTran对象:tranSetup()方法 104

4.5 C实现 107

4.5.1 用“C+”的QHsm类 107

4.5.2 QHsm构造函数与析构函数 109

4.5.3 状态处理器方法和成员函数指针 109

4.5.4 QHsm方法 110

4.5.5 用C的状态图例子 110

4.6 防止误解的说明 113

4.7 小结 115

5.1.2 问题 118

5.1.1 目的 118

5.1.3 解决办法 118

5.1 终结钩子 118

第5章 状态模式 118

5.1.4 样例代码 119

5.1.5 结论 121

5.2 提示法 122

5.2.1 目的 122

5.2.2 问题 122

5.2.3 解决办法 122

5.2.4 样例代码 123

5.2.5 结论 127

5.3 延迟事件 128

5.3.1 目的 128

5.3.2 问题 128

5.3.3 解决办法 128

5.3.4 样例代码 130

5.4.2 问题 133

5.4.1 目的 133

5.4 正交构件 133

5.3.5 结论 133

5.4.3 解决办法 134

5.4.4 样例代码 135

5.4.5 结论 141

5.5 转换到历史 143

5.5.1 目的 143

5.5.2 问题 143

5.5.3 解决办法 143

5.5.4 样例代码 143

5.5.5 结论 147

5.6 小结 147

第6章 继承状态模型 149

6.1 用C++的状态图细化举例 149

6.2 用C的状态图细化举例 157

6.2.1 为多态性准备C+状态机 157

6.2.2 继承和细化C+状态机 159

6.3 防止误解的说明 160

6.3.1 静态与动态状态转换的比较 161

6.3.2 多重继承 161

6.3.3 继承和细化状态图的探索 163

6.4 小结 165

第2部分 量子框架 170

第7章 量子框架介绍 170

7.1 传统多线程方法 170

7.1.1 就餐哲学家——传统方法 171

7.1.2 Therac-25的故事 174

7.2 QF的计算模型 175

7.2.1 基于活动对象的多线程 176

7.2.2 量子类比 177

7.2.3 出版-订阅事件交付 179

7.2.5 重访就餐哲学家问题 180

7.2.4 通用结构 180

7.3 QF的角色 183

7.3.1 概念完整的源泉 184

7.3.2 RTOS抽象层 185

7.3.3 软件总线 186

7.3.4 高度并行计算平台 187

7.3.5 自动代码生成的基础 188

7.4 小结 189

第8章 量子框架的设计 191

8.1 嵌入式实时系统 191

8.2 处理错误和异常条件 192

8.2.1 按契约设计 194

8.2.2 基于状态的异常条件处理 197

8.3 内存管理 198

8.3.1 堆问题 199

8.3.2 QF中的内存管理 201

8.4.1 互斥的危险 203

8.4 互斥和阻塞 203

8.4.2 基于活动对象的系统中的阻塞 206

8.5 传送事件 207

8.5.1 动态事件分配 209

8.5.2 出版-订阅模型 212

8.5.3 组播事件 217

8.5.4 自动事件回收 219

8.6 活动对象 220

8.6.1 内部状态机 220

8.6.2 事件队列 221

8.6.3 执行线程 222

8.7 初始化和清除 224

8.7.1 初始化框架 224

8.7.2 启动QF应用 225

8.8 时间管理 226

8.7.3 优美地终结QF应用 226

8.8.1 QTimer类 227

8.8.2 时钟节拍,QF∷tick()方法 228

8.9 QF API快速参考 229

8.9.1 QF接口 229

8.9.2 QActive接口 231

8.9.3 QTimer接口 232

8.10 小结 233

第9章 量子框架的实现 236

9.1 作为一个Parnas家族的QF 236

9.2 代码组织 236

9.2.1 目录结构 238

9.2.2 公共范围头文件 240

9.2.3 包范围头文件 241

9.3.1 临界区 242

9.3 公共元素 242

9.3.2 事件池 243

9.3.3 事件队列 247

9.4 DOS:不具备多任务内核的QF 253

9.4.1 前台/后台处理 253

9.4.2 使用QF的前台/后台 254

9.4.3 DOS特定的代码 258

9.4.4 QF给前台/后台系统带来的益处 260

9.5 Win32:桌面上的QF 261

9.5.1 临界区、事件队列和执行线程 261

9.5.2 时钟节拍 264

9.6 RTKernel-32:带有一个基于优先级的可抢占内核的QF 266

9.6.1 临界区和事件池 266

9.6.2 事件队列和执行线程 269

9.6.3 RTKernel-32的初始化和时钟节拍 271

9.6.4 使用RTKernel-32进行交叉开发 272

9.7 小结 273

第10章 量子框架应用实例 275

10.1 产生一个QF应用 275

10.1.1 信号和事件 275

10.1.2 Table活动对象 277

10.1.3 Philosopher活动对象 280

10.1.4 配置DPP 282

10.1.5 注解 283

10.2 开发QF应用的规则 284

10.3 开发QF应用的启发 286

10.4 划分事件队列和事件池的大小 287

10.4.1 事件队列 287

10.4.2 事件池 290

10.5 系统集成 290

10.6 小结 291

11.1 QP的关键元素 292

第11章 结束语 292

11.1.1 是一个设计类型,而不是工具 293

11.1.2 是一个建模助手 293

11.1.3 是一个学习上的助手 294

11.1.4 是一个有用的隐喻 295

11.2 QP的建议 296

11.2.1 量子编程语言 296

11.2.2 未来的RTOS 297

11.2.3 硬件/软件协同设计 297

11.3 一个邀请 298

附录A C+——用C作面向对象编程 301

A.1 抽象 301

A.2 继承 303

A.3 多态性 305

A.4 费用和额外开销 312

A.5 小结 313

附录B 表示法指南 315

B.1 类图 315

B.2 状态图 317

B.3 顺序图 318

B.4 时序图 318

附录C CD-ROM 321

C.1 源代码结构 321

C.2 安装 321

C.2.1 源代码 321

C.2.2 OnTime RTOS-32评估套件 321

C.2.3 Adobe Acrobat Reader 322

C.3 练习的答案 322

C.4 资源 323

参考文献 324