《嵌入式系统软件工程 方法实用技术及应用》PDF下载

  • 购买积分:19 如何计算积分?
  • 作  者:(美)RobertOshana,(美)MarkKraeling主编;单波,苏林萍,谢萍等译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2016
  • ISBN:9787302425311
  • 页数:686 页
图书介绍:本书系统论述了如下内容:一个嵌入式系统的良好架构的原则设计实践,嵌入式系统的一个组成部分的原理细节——包括数字信号处理,安全关键原则,发嵌入式系统软件性能工程策略技术、开发用户界面的策略,测试和部署嵌入式系统的开发过程,确保质量为优化性能,嵌入式软件的存储器的实用技术,开发多核嵌入式系统软件,如何开发网络,嵌入式软件存储等。

第1章 嵌入式软件工程与实时系统 1

1.1 软件工程 1

1.2 嵌入式系统 5

1.3 实时系统 7

1.3.1 实时系统的类型——软实时和硬实时系统 8

1.3.2 硬实时系统的例子 9

1.3.3 实时事件的特点 10

1.3.4 有效执行与执行环境 11

1.4 实时系统设计的挑战 11

1.4.1 响应时间 11

1.4.2 从故障中恢复 12

1.4.3 嵌入式系统软件的构建过程 13

1.5 分布式和多处理器架构 14

1.6 嵌入式系统软件 15

1.7 嵌入式系统的硬件抽象层 17

1.8 小结 20

第2章 嵌入式系统软/硬件协同开发 21

2.1 当今嵌入式系统示例 21

2.2 HW/SW原型机用户 23

2.3 HW/SW原型机设计选项 24

2.4 原型设计决策标准 25

2.5 选择正确的原型 26

2.6 工业设计链 27

2.7 更改设计流程的必要 28

2.8 不同类型的虚拟原型机 28

2.9 虚拟原型的简要历史 29

2.10 专有产品的限制 30

2.11 什么使得虚拟原型机变快 30

2.12 标准化:SystemC TLM-2.0的时代 31

2.13 SystemC TLM-2抽象层 31

2.14 系统架构虚拟原型机 32

2.15 软件虚拟原型机 32

2.16 小结——虚拟化的重要性日益增加 35

第3章 嵌入式系统的软件建模 36

3.1 何时、为何要为嵌入式系统建立模型 36

3.2 建模 36

3.3 什么是建模语言 39

3.4 建模语言举例 40

3.5 V图承诺 42

3.6 为什么要建立嵌入式系统的模型 43

3.7 何时为嵌入式系统建立模型 44

3.7.1 任务和安全关键型应用程序 44

3.7.2 高度复杂的应用程序和系统 44

3.8 操作复杂性 47

3.9 缺陷检测时间与成本 48

3.10 大型开发团队需要建模 48

3.11 建模通常是唯一的选择 49

3.12 建模是有利的,但不是说所有模型都是错的吗 50

3.13 有了原型机——又该如何 52

3.14 结论 53

3.15 下一步——试用 54

3.15.1 带有直流电动机的闭环控制 54

3.15.2 下载套件了解更多原型机设计 54

3.15.3 使用NI状态图模块设计应用程序 54

3.15.4 设计和模拟电刷式直流电动机H桥电路 54

3.15.5 使用开放源代码Modelica模型进行多域物理建模 55

参考文献 55

第4章 嵌入式系统的软件设计架构与模式 56

4.1 架构和设计综述 56

4.2 三个层次的设计 57

4.3 什么是设计模式 58

4.3.1 必须要采用面向对象技术来使用设计模式吗 59

4.3.2 一个架构实例 60

4.3.3 使用模式 62

4.3.4 做权衡决策 63

4.4 软件架构的类别和视图 64

4.4.1 主要的架构视角 64

4.4.2 次要的视角 74

4.5 小结 74

参考文献 74

第5章 实时构件:事件与触发器 75

5.1 事件和触发器 75

5.2 室温控制单元 75

5.3 事件系统 76

5.4 事件句柄 77

5.5 事件方法 78

5.6 事件数据结构 78

5.7 可重入性 79

5.7.1 禁用和启用中断 79

5.7.2 进入临界区和退出临界区 80

5.7.3 信号量 80

5.7.4 进入/退出临界区的实现 80

5.8 事件处理 81

5.9 集成 81

5.10 触发器 82

5.11 闪烁的LED 82

5.12 设计思想 83

5.13 嘀嗒定时器 84

5.14 触发器接口 84

5.15 触发器描述符 85

5.16 数据分配 85

5.17 设置触发器 86

5.18 嘀嗒计数 87

5.19 确保可重入 89

5.20 初始化 90

5.21 闪烁 90

5.22 蜂鸣器鸣响 91

5.23 实时性 92

5.24 小结 93

第6章 嵌入式软件的硬件接口 94

6.1 简介 94

6.2 与硬件团队的合作 94

6.2.1 主动合作 95

6.2.2 团队代表 95

6.2.3 注册设计工具 95

6.2.4 共同开发 96

6.2.5 系统集成 97

6.3 硬件设计方面有用的知识 97

6.3.1 硬件事件的通知 97

6.3.2 向硬件下达任务 98

6.3.3 位域对齐 98

6.3.4 固定位的位置 99

6.3.5 模块版本号 99

6.3.6 调试钩子 100

6.4 支持多个硬件版本 100

6.4.1 编译开关 101

6.4.2 构建开关 104

6.4.3 运行开关 105

6.4.4 自适应开关 106

6.5 硬件交互困难 107

6.5.1 原子寄存器访问 107

6.5.2 同一寄存器中混合的位类型 108

6.5.3 边沿与电平中断 110

6.6 测试与故障排除 110

6.6.1 临时钩子 110

6.6.2 永久钩子 111

6.7 小结 111

第7章 嵌入式软件编程和实现准则 112

7.1 简介 112

7.1.1 高质量编程的原则 112

7.1.2 是什么让嵌入式不同于一般编程 114

7.2 启动嵌入式软件项目 114

7.2.1 硬件平台输入 114

7.2.2 工程文件和组织 115

7.2.3 团队编程指南 116

7.2.4 语法标准 117

7.2.5 源代码中的安全要求 118

7.3 变量结构 119

7.3.1 变量声明 119

7.3.2 数据类型 121

7.3.3 定义 122

第8章 嵌入式操作系统 125

8.1 前台/后台系统 125

8.2 实时内核 126

8.2.1 RTOS(实时操作系统) 127

8.2.2 临界区 127

8.2.3 任务管理 127

8.2.4 分配任务优先级 130

8.2.5 决定堆栈的大小 131

8.2.6 空闲任务 133

8.3 优先级 133

8.4 就绪队列 133

8.5 调度点 134

8.6 上下文切换 135

8.7 中断管理 137

8.7.1 处理CPU中断 137

8.7.2 非内核感知的中断服务程序 139

8.7.3 拥有多种中断优先级的处理器 140

8.7.4 所有的中断向量的共同地址 140

8.7.5 每个中断向量对应唯一的地址 141

8.8 时钟周期(或系统时钟周期) 142

8.9 等待队列 142

8.10 时间管理 142

8.11 资源管理 144

8.11.1 资源管理:禁用/启用中断 145

8.11.2 资源管理:信号量 145

8.11.3 资源管理:优先级反转 148

8.11.4 资源管理:互斥信号量 149

8.11.5 资源管理:僵局(死锁) 151

8.12 同步 152

8.12.1 同步:信号量 152

8.12.2 同步:信用跟踪 152

8.12.3 双方相约 153

8.13 消息传递 154

8.13.1 消息 154

8.13.2 消息队列 155

8.13.3 流控制 155

8.13.4 客户端和服务器端 157

8.14 内存管理 157

8.15 小结 158

第9章 嵌入式系统设计的软件复用 159

9.1 为什么软件复用如此重要 159

9.2 什么限制了软件复用 161

9.3 各种软件复用 162

9.4 通过层实现复用 163

9.5 进入到下一个级别 164

9.6 引入元件厂 165

9.7 工厂硬件配置 165

9.8 工厂软件配置 166

9.9 工厂对可复用性的作用 167

9.10 RTOS不可知论 168

9.11 任意扩展性 169

9.12 结论 169

参考文献 170

第10章 嵌入式系统的软件性能工程 171

10.1 示例:eNodeB应用程序的延迟时间与吞吐量对比 181

10.2 性能模式和反模式 187

参考文献 191

第11章 嵌入式软件的性能优化 192

11.1 代码优化过程 192

11.2 使用开发工具 192

11.2.1 编译器的优化 192

11.2.2 基本的编译器配置 192

11.2.3 启用优化 193

11.2.4 附加的优化配置 194

11.2.5 使用分析器 194

11.3 背景——理解嵌入式架构 194

11.4 基本的C优化技术 194

11.4.1 选择正确的数据类型 194

11.4.2 函数的调用规范 195

11.4.3 指针和内存访问 198

11.4.4 限制和指针别名 198

11.4.5 循环 199

11.4.6 额外的提示和技巧 199

11.5 一般循环转换 200

11.5.1 循环展开 200

11.5.2 多采样技术 201

11.5.3 部分求和 202

11.5.4 软件流水线 203

11.6 优化技术的实例应用:互相关 204

11.6.1 设置 205

11.6.2 原始实例 205

第12章 嵌入式软件的内存优化 211

12.1 简介 211

12.2 代码大小的优化 211

12.2.1 编译标志位和标志位挖掘 211

12.2.2 目标ISA的大小和性能的折中 212

12.2.3 为代码大小调整ABI 213

12.2.4 买者自负:编译器优化正交码的大小 216

12.3 内存布局优化 217

12.3.1 内存优化简介 218

12.3.2 重点优化 218

12.3.3 向量化和动态代码:计算比率 218

12.3.4 C语言指针别名 220

12.4 数据结构、数据结构的数组及其添加 220

12.5 内存性能的循环优化 221

12.5.1 数据对齐的连锁效应 221

12.5.2 选择数据类型的益处 222

第13章 嵌入式软件的功耗优化 223

13.1 简介 223

13.2 理解功耗 223

13.2.1 功耗的基本概念 223

13.2.2 静态与动态功率消耗 224

13.2.3 最大功率、平均功率、最坏情况功率和典型功率 224

13.3 测量功耗 225

13.3.1 使用电流表测量功率 225

13.3.2 使用霍尔传感器芯片测量功率 226

13.3.3 VRMs(电压调整模块的电源芯片) 226

13.3.4 静态功率测量 226

13.3.5 动态功率测量 227

13.3.6 分析应用的功率消耗 227

13.4 最小化功耗 228

13.4.1 硬件支持 229

13.4.2 时钟控制和电压控制 231

13.4.3 低功耗示例 232

13.5 优化数据流 235

13.5.1 减少存储器访问的功率消耗 235

13.5.2 DDR简介 236

13.5.3 优化DDR数据流功耗 237

13.5.4 通过时序优化功率 238

13.5.5 通过交替方式优化 238

13.5.6 优化存储器的软件数据组织 238

13.5.7 优化通用DDR配置 239

13.5.8 优化DDR burst访问 239

13.6 SRAM和高速缓存数据流的功率优化 239

13.6.1 SRAM(所有存储器)与代码大小 239

13.6.2 SRAM功率消耗和并行处理 240

13.6.3 数据转换与功率消耗 240

13.6.4 高速缓存的使用与SoC存储器布局 241

13.6.5 局部性说明 241

13.6.6 集合关联说明 241

13.6.7 高速缓存布局 243

13.6.8 回写高速缓存与直写式高速缓存 243

13.6.9 高速缓存一致性功能 243

13.6.10 编译器优化高速缓存 244

13.7 外设/通信使用 244

13.7.1 数据DMA与CPU 245

13.7.2 协处理器 246

13.7.3 系统总线配置 246

13.7.4 外设速度等级和总线宽度 246

13.7.5 外设到内核的通信 247

13.8 算法 247

13.8.1 编译器优化级别 247

13.8.2 指令打包 248

13.8.3 探讨循环展开 248

13.8.4 软件流水处理 248

13.8.5 禁止递归 250

13.8.6 降低精度 251

13.8.7 低功率代码序列和数据模式 251

13.9 小结 251

第14章 嵌入式系统中的用户界面设计 253

14.1 用户界面设计分析阶段 255

14.1.1 初步迭代设计 256

14.1.2 第二个原型的开发(高保真工具绘制模型) 256

14.1.3 基本的应用案例 257

14.1.4 用户分析方案 257

14.1.5 层次任务分析 257

14.1.6 设计克服用户认识、感知及学习时的局限性的途径 258

14.1.7 错误信息 258

14.2 虚拟窗口 258

14.3 使用实体关系图的数据模型 259

14.4 使用CREDO试验矩阵来分析虚拟窗口 260

14.5 启发式评估 260

14.6 格式塔 261

14.7 应用模型—视图—控制器体系结构设计用户界面 262

14.7.1 MVC软件体系架构 263

14.7.2 关于MVC软件体系结构的问题及展望 263

14.7.3 使用MVC的解决方案 263

14.8 对安全性要求苛刻的用户界面 264

14.8.1 更加安全的HMI设计过程 264

14.8.2 人机界面设计安全手册 265

参考文献 267

第15章 嵌入式软件质量、集成和测试技术 268

15.1 什么是软件测试 268

15.1.1 为什么要测试软件 268

15.1.2 多少测试就足够了 268

15.1.3 应该何时进行测试 269

15.1.4 谁来做决策 269

15.2 可用的技术 269

15.2.1 静态和动态分析 270

15.2.2 需求追踪 272

15.2.3 静态分析——遵循编码标准 275

15.2.4 基本结与基本圈复杂度——案例研究 277

15.2.5 理解动态分析 280

15.2.6 继承高完整性的系统 280

15.2.7 定义单元、模块和集成测试 281

15.2.8 定义结构化覆盖分析 282

15.2.9 结合单元测试和系统测试来实现代码覆盖 283

15.2.10 通过回归测试保持功能 286

15.2.11 单元测试和由测试驱动的开发 286

15.2.12 自动生成测试用例 287

15.3 设置标准 288

15.3.1 标准的术语 288

15.3.2 公认的流程标准的演变 288

15.3.3 自由选择适当的标准 292

15.3.4 建立内部的流程标准 292

15.3.5 建立内部编码规范集的公共基础 293

15.3.6 处理现有的代码库 293

15.3.7 获得自定义软件开发的内部编码标准——案例研究 293

15.4 处理异常 296

15.4.1 处理自动生成的代码 296

15.4.2 处理继承的代码 297

15.4.3 通过目标代码验证跟踪需求 300

15.5 实施测试解决方案的环境 307

15.5.1 实用主义的考虑 307

15.5.2 考虑备选方案 307

15.6 小结 309

第16章 嵌入式系统的软件开发工具 310

16.1 调试工具简介 310

16.2 GDB调试 311

16.2.1 GDB调试器的配置 311

16.2.2 启动GDB 312

16.2.3 编译应用程序 313

16.2.4 调试应用程序 314

16.2.5 检查数据 315

16.2.6 使用断点 316

16.2.7 步进 316

16.2.8 更改程序 316

16.2.9 分析内核转储 317

16.3 调试代理设计 317

16.3.1 使用案例 318

16.3.2 调试代理简介 321

16.3.3 启动应用程序 321

16.3.4 上下文切换 322

16.3.5 位置独立的可执行文件 323

16.3.6 来自应用程序的调试事件 325

16.3.7 多核 327

16.3.8 启动调试代理 327

16.4 使用JTAG调试 328

16.4.1 使用JTAG的好处 328

16.4.2 使用JTAG启动主板 329

16.4.3 与调试代理的比较 329

16.4.4 GDB和JTAG 330

16.5 使用Eclipse和GDB的调试工具 331

16.5.1 使用GDB调试Linux应用程序 331

16.5.2 Linux内核的KGDB调试 332

16.6 检测代码 333

16.7 分析工具 336

16.7.1 strace 336

16.7.2 mtrace 337

16.7.3 Valgrind 338

16.8 硬件功能 339

16.8.1 硬件断点 340

16.8.2 硬件监视点 340

16.9 调试提示和技巧 340

第17章 嵌入式系统的多核软件开发 342

17.1 分析和高层设计 342

17.1.1 分析 342

17.1.2 高层次设计 348

17.1.3 小结 353

17.2 实现和低层次设计 353

17.2.1 基于线程的实现 354

17.2.2 互斥、锁、嵌套锁 357

17.2.3 粒度 359

17.2.4 实现任务并行 359

17.2.5 消息传递实现 364

17.2.6 使用混合方法 369

参考文献 370

第18章 安全关键软件的开发 371

18.1 引言 371

18.2 有哪些安全需求 371

18.3 项目规划策略 372

18.4 故障、失效、危害和风险分析 375

18.4.1 故障、错误和失效 375

18.4.2 可用性和可靠性 375

18.4.3 故障处理 376

18.4.4 危害分析 376

18.4.5 风险分析 378

18.5 安全关键的架构 378

18.6 软件实施策略 380

参考文献 388

第19章 知识产权 389

19.1 背景 389

19.2 软件属于你吗 390

19.2.1 获得软件 390

19.2.2 版权保护 390

19.2.3 获得版权 391

19.3 专利 392

19.3.1 什么是专利 392

19.3.2 为什么会有专利 393

19.3.3 决定为哪些部分申请专利 394

19.3.4 申请专利 394

19.3.5 专利里都有什么 395

19.3.6 专利授权 397

19.4 问题 398

19.4.1 开源软件 398

19.4.2 授权和出售软件 398

19.4.3 收购 399

19.4.4 发现侵权 399

19.4.5 避免版权侵权 400

19.4.6 避免专利侵权 401

第20章 管理嵌入式软件开发 402

20.1 能力成熟度模型集成 403

20.2 OSI模型 406

20.3 软件开发 408

20.3.1 V模型 408

20.3.2 瀑布模型 411

20.3.3 敏捷模型 412

20.4 组织 412

20.5 项目纲领 414

20.6 利益相关者和核心团队 415

20.7 产品生命周期管理 417

20.8 组合管理 418

20.9 项目管理生命周期 419

20.10 项目生命周期 425

20.11 解决问题 434

20.12 沟通 434

20.13 缩写,符号,首字母缩略词 436

20.14 版权确认 437

参考文献 437

第21章 嵌入式系统的敏捷开发 438

21.1 引言 438

21.2 嵌入式系统有什么特殊之处 439

21.3 嵌入式系统的敏捷项目规划 442

21.3.1 项目展望 443

21.3.2 初始安全性/可靠性风险评估 445

21.3.3 初始项目风险评估 445

21.3.4 估算 446

21.3.5 进度安排 447

21.4 嵌入式软件项目管理 448

21.4.1 站立(会议) 448

21.4.2 性能指标 448

24.4.3 迭代回溯(共同的阶段) 449

21.5 嵌入式敏捷开发实践 450

21.6 敏捷规模因素 454

21.7 敏捷方法能帮助你遵守标准吗 455

21.8 小结 457

参考文献 458

第22章 嵌入式软件在汽车领域中的应用 460

22.1 发展历史 460

22.1.1 汽车电子:1911—2000 460

22.1.2 电子内容增长的驱动力 461

22.1.3 引发的嵌入式软件增长 464

22.1.4 汽车编程语言 464

22.1.5 小结 465

22.2 汽车的各部分及其区别 465

22.2.1 车身 465

22.2.2 底盘和安全 466

22.2.3 辅助驾驶 467

22.2.4 动力总成和变速器 467

22.2.5 信息娱乐和远程信息处理 468

22.2.6 汽车子部分总结 469

22.3 汽车质量 469

22.3.1 基于墨菲定律制定计划 470

22.3.2 容错通信 470

22.3.3 容错软件 470

22.3.4 零缺陷软件 471

22.3.5 风险管理和故障模式 471

22.3.6 失效模式和影响分析 472

22.4 开发和测试 474

22.4.1 子系统的互操作性 474

22.4.2 软件规范 474

22.4.3 软件体系结构 474

22.4.4 建模 475

22.4.5 自动编码与驱动程序 476

22.4.6 基准测试 476

22.4.7 跟踪和调试 477

22.4.8 最后阶段的测试 478

22.4.9 校验 479

22.4.10 维护/在产品生命周期内支持 479

22.5 汽车诊断 479

22.5.1 故障指示灯 480

22.5.2 数据记录器 480

22.5.3 第二代车载诊断 481

22.6 汽车标准 481

22.6.1 汽车工业软件可靠性协会 481

22.6.2 汽车开放系统体系结构 481

22.6.3 汽车电子委员会 484

22.7 汽车安全 485

22.7.1 ISO 26262标准 485

22.7.2 汽车安全完整性等级 485

22.8 汽车防盗 486

22.8.1 过去这意味着:汽车警报器等 486

22.8.2 现在这意味着:黑客行为 486

22.8.3 未来这将意味着:假冒 486

22.9 汽车市场不久的未来 487

22.9.1 性能 487

22.9.2 多核的出现 487

22.9.3 车载终端 488

22.9.4 自动汽车 488

22.10 小结 489

第23章 I/O及存储设备编程 490

23.1 I/O设备与I/O控制器 490

23.1.1 I/O设备的分类 490

23.1.2 I/O控制器 491

23.1.3 内存映射与DMA 492

23.1.4 闪存、SD/SDHC与硬盘驱动器 494

23.1.5 网络附加存储 496

23.2 I/O编程 496

23.2.1 I/O控制模式 496

23.2.2 I/O软件目标 500

23.2.3 I/O软件层 500

23.2.4 案例研究:Linux设备驱动程序 502

23.3 存储编程 506

23.3.1 I/O用于块设备 506

23.3.2 闪存设备编程 509

23.3.3 SATA设备驱动程序 516

23.4 存储系统性能改善 517

23.4.1 案例研究1:SDHC上的性能优化 517

23.4.2 案例研究2:NAS上的性能优化 519

23.5 小结 524

参考文献 525

第24章 网络应用的嵌入式软件 526

24.1 引言 526

24.2 网络设备的系统结构 526

24.3 网络多核SoC 528

24.3.1 核心 529

24.3.2 数据包引擎的硬件(PEH)块 529

24.4 网络编程模型 531

24.5 数据包处理软件的结构 533

24.5.1 数据层面的基础设施(DP红外线) 533

24.5.2 转发引擎的结构 534

24.5.3 数据包处理应用的要求 534

24.6 网络应用编程技术 535

24.6.1 网络应用程序员可以使用的多核性能技术 535

24.6.2 查找流上下文时避免使用锁 535

24.6.3 避免引用计数 541

24.6.4 安全引用机制 542

24.6.5 流并行 543

24.6.6 减少与更新统计数据相关的缓存冲突 546

24.6.7 统计数据加速 548

24.7 网络应用程序员常用的性能技术 549

24.8 嵌入式网络设备的Linux操作系统 550

24.9 小结 551

第25章 嵌入式Linux操作系统 552

25.1 简介 552

25.1.1 选择Linux进行嵌入式系统开发的原因 552

25.1.2 Linux发行版 552

25.1.3 适用于Linux的嵌入式平台 553

25.1.4 许可 555

25.2 嵌入式Linux入门 559

25.2.1 内存管理单元 559

25.2.2 启动载入器 559

25.2.3 引导装载程序 559

25.2.4 内核 560

25.2.5 应用程序 574

25.3 在参考板上运行Linux 577

25.3.1 参考平台 577

25.3.2 从BeagleBone入手 577

附录A C语言编码标准:源代码的发展 581

A.1 适用范围 581

A.2 定义 582

A.3 规则与约定 582

A.3.1 显示格式 582

A.3.2 命名 588

A.3.3 执行语句限制 592

A.3.4 语言结构与特征 592

A.4 复杂性 608

A.5 问题构建 608

A.6 源和include文件布局 608

A.7 特性 610

A.8 标准缩写 611

A.9 建议的模块名 612

A.10 源代码模板 613

A.11 标准的包含文件模板 614

A.12 portable.h包含文件模板 615

A.13 函数模板 616

附录B C++在嵌入式软件、系统与平台方面的使用 617

B.1 C++对于嵌入式相对廉价的特性 617

B.2 C++对于嵌入式稍微昂贵的特性 618

B.3 C++对于嵌入式昂贵的特性 620

案例研究1 软件性能工程 622

CS1.1 项目简介和说明 622

CS1.2 初始性能评估与信息要求 623

CS1.3 开发初始评估 624

CS1.4 跟踪报告指标 625

CS1.5 减少测量误差 628

CS1.6 经验教训与总结 630

参考文献 631

案例研究2 用户界面设计:警务指挥与控制系统 632

CS2.1 案例简介 632

CS2.2 警务指挥与控制系统 633

CS2.2.1 警务指挥与控制系统的说明和概念模型 633

CS2.2.2 系统数据收集方法 634

CS2.2.3 系统用例图和用例场景 635

CS2.3 重要用例 636

CS2.4 场景 637

CS2.4.1 警务指挥和控制的用户界面场景(完美场景) 637

CS2.4.2 不完美的场景 638

CS2.4.3 警务指挥和控制系统的典型用户场景 638

CS2.5 层次任务分析 639

CS2.6 警务指挥和控制系统的主要交互方式 641

CS2.7 克服用户认知、感知和学习限制的设计方法 642

CS2.8 克服用户局限性的外部认知方法 643

CS2.9 警务指挥和控制系统的报错信息和警告 644

CS2.10 数据模型(实体关系图)与警务指挥和控制系统中的虚拟操作系统 645

CS2.11 识别警务指挥和控制系统用户界面设计中的完全形态 649

CS2.12 数据显示技术 651

CS2.13 第一原型的易用性测试 651

CS2.14 二次迭代——低保真原型 653

CS2.14.1 为低保真原型第二次迭代所做的易用性测试和缺陷矫正 655

CS2.14.2 低保真原型的最终版 658

CS2.14.3 支持从新手到专家的过渡 659

CS2.15 高保真原型 659

CS2.16 快速开始向导 661

案例研究3 转化为多核 662

CS3.1 典型应用软件简介 662

CS3.2 软件系统分区 663

CS3.2.1 控制层面软件迁移 663

CS3.2.2 数据层面软件迁移 664

CS3.3 数据包的并行处理 664

CS3.4 混合方法(并行加流水线) 666

CS3.5 与控制层面分区的数据通信 668

CS3.6 管理代理 668

CS3.7 Rx/Tx驱动器 669

案例研究4 嵌入式系统质量和衡量计划的软件工程 670

CS4.1 开发方法 671

CS4.2 度量收集 674

CS4.3 小结 686