求真百科欢迎当事人提供第一手真实资料,洗刷冤屈,终结网路霸凌。

嵌入式与实时操作系统查看源代码讨论查看历史

事实揭露 揭密真相
跳转至: 导航搜索

来自 孔夫子网 的图片

嵌入式与实时操作系统》,[美] 王孔启(K.C. Wang) 著,徐坚 李佳蓓 吴文峰 译,出版社: 机械工业出版社。

机械工业出版社成立于1950年,是建国后国家设立的第一家科技出版社,前身为科学技术出版社,1952年更名为机械工业出版社[1]。机械工业出版社(以下简称机工社)由机械工业信息研究院作为主办单位,目前隶属于国务院国资委[2]

内容简介

本书涵盖了操作系统的基本概念和原则,展示了如何将它们应用于设计和实现完整的嵌入式与实时操作系统。包括ARM架构、ARM指令和编程、用于开发程序的工具链、用于软件实现和测试的虚拟机、程序执行映像、函数调用约定、运行时堆栈使用以及用汇编代码链接C程序的所有基础和背景信息。

目录

出版者的话

译者序

前言

关于作者

1.1 关于本书 1

1.2 本书的动机 1

1.3 本书的目标读者 1

1.4 本书的独特之处 2

1.5 本书的内容 3

1.6 本书可作为嵌入式系统的教科书 5

1.7 本书可作为操作系统的教科书 5

1.8 本书可用于自学 5

参考文献 6

  • 2章 ARM体系结构和程序设计 7

2.1 ARM处理器模式 7

2.2 ARM CPU寄存器 8

2.2.1 通用寄存器 8

2.2.2 状态寄存器 8

2.2.3 ARM处理器模式的变更 9

2.3 指令流水线 10

2.4 ARM指令 10

2.4.1 条件标志和条件 10

2.4.2 分支指令 11

2.4.3 算术运算 11

2.4.4 比较运算 11

2.4.5 逻辑运算 12

2.4.6 数据移动操作 12

2.4.7 即时值和桶移位器 12

2.4.8 乘法指令 13

2.4.9 加载和存储指令 13

2.4.10 基址寄存器 13

2.4.11 块数据传输 13

2.4.12 堆栈操作 13

2.4.13 堆栈和子例程 14

2.4.14 软中断 14

2.4.15 PSR转移指令 14

2.4.16 协处理器指令 14

2.5 ARM工具链 15

2.6 ARM系统模拟器 15

2.7 ARM程序设计 16

2.7.1 ARM汇编编程示例1 16

2.7.2 ARM汇编编程示例2 18

2.7.3 汇编和C语言的结合编程 19

2.8 设备驱动程序 25

2.8.1 系统内存映射 26

2.8.2 GPIO编程 26

2.8.3 串行I/O的UART驱动程序 27

2.8.4 彩色LCD驱动程序 31

2.9 本章小结 44

思考题 44

参考文献 45

第3章 中断和异常处理 46

3.1 ARM异常 46

3.1.1 ARM处理器模式 46

3.1.2 ARM异常类型 47

3.1.3 异常向量表 48

3.1.4 异常处理程序 48

3.1.5 从异常处理程序返回 49

3.2 中断 50

3.2.1 中断类型 50

3.2.2 中断控制器 50

3.2.3 主中断控制器和辅中断控制器 51

3.3 中断处理 52

3.3.1 向量表内容 52

3.3.2 硬件中断序列 52

3.3.3 软件中的中断控制 53

3.3.4 中断处理程序 54

3.3.5 非嵌套中断处理程序 54

3.4 计时器驱动程序 55

3.4.1 ARM Versatile 926EJS计时器 55

3.4.2 计时器驱动程序实现 55

3.5 键盘驱动程序 60

3.5.1 ARM PL050鼠标-键盘接口 60

3.5.2 键盘驱动程序原理 60

3.5.3 中断驱动的驱动程序设计 60

3.5.4 键盘驱动程序实现 61

3.6 UART驱动程序 66

3.6.1 ARM PL011 UART接口 66

3.6.2 UART寄存器 66

3.6.3 中断驱动的UART驱动程序 67

3.7 安全数字卡 72

3.7.1 SD卡协议 72

3.7.2 SDC驱动程序 72

3.7.3 改进的SDC驱动程序 79

3.7.4 多扇区数据传输 80

3.8 向量中断 83

3.8.1 ARM PL190向量中断控制器 83

3.8.2 为向量中断配置VIC 83

3.8.3 向量中断处理程序 84

3.8.4 向量中断的演示 84

3.9 嵌套中断 86

3.9.1 为何需要嵌套中断 86

3.9.2 ARM中的嵌套中断 86

3.9.3 在SYS模式下处理嵌套中断 87

3.9.4 嵌套中断的演示 87

3.10 嵌套中断和进程切换 90

3.11 本章小结 90

思考题 91

参考文献 92

第4章 嵌入式系统的模型 93

4.1 嵌入式系统的程序结构 93

4.2 超级循环模型 93

4.3 事件驱动模型 95

4.3.1 超级循环程序的缺点 95

4.3.2 事件 95

4.3.3 周期性事件驱动程序 95

4.3.4 异步事件驱动程序 99

4.4 事件的优先级 100

4.5 进程模型 101

4.5.1 单处理器进程模型 101

4.5.2 多处理器进程模型 101

4.5.3 实地址空间进程模型 101

4.5.4 虚拟地址空间进程模型 101

4.5.5 静态进程模型 101

4.5.6 动态进程模型 101

4.5.7 非抢占式进程模型 102

4.5.8 抢占式进程模型 102

4.6 单处理器内核模型 102

4.7 单处理器操作系统模型 102

4.8 多处理器系统模型 102

4.9 实时系统模型 102

4.10 嵌入式系统软件设计方法论 102

4.10.1 *级语言支持事件驱动编程 103

4.10.2 状态机模型 103

4.10.3 StateChart模型 107

4.11 本章小结 107

思考题 107

参考文献 108

第5章 嵌入式系统中的进程管理 109

5.1 多任务 109

5.2 进程的概念 109

5.3 多任务和上下文切换 109

5.3.1 一个简单的多任务程序 109

5.3.2 上下文切换 111

5.3.3 多任务处理的演示 116

5.4 动态进程 117

5.4.1 动态进程的创建 117

5.4.2 动态进程的演示 119

5.5 进程调度 120

5.5.1 进程调度术语 120

5.5.2 进程调度的目标、策略和算法 120

5.5.3 嵌入式系统中的进程调度 121

5.6 进程同步 121

5.6.1 睡眠和唤醒 121

5.6.2 使用睡眠/唤醒的设备驱动程序 122

5.6.3 使用睡眠/唤醒的事件驱动嵌入式系统 125

5.6.4 使用睡眠/唤醒的资源管理 127

5.7 信号量 128

5.8 信号量的应用 129

5.8.1 信号量锁 129

5.8.2 互斥锁 130

5.8.3 使用信号量的资源管理 130

5.8.4 等待中断和消息 130

5.8.5 进程协作 130

5.8.6 信号量的优势 132

5.8.7 使用信号量的注意事项 132

5.8.8 在嵌入式系统中使用信号量 132

5.9 其他同步机制 134

5.9.1 OpenVMS中的事件标志 134

5.9.2 MVS中的事件变量 135

5.9.3 MVS中的ENQ/DEQ 136

5.10 *级同步的构造 136

5.10.1 条件变量 136

5.10.2 管程 136

5.11 进程通信 137

5.11.1 共享内存 137

5.11.2 管道 137

5.11.3 信号 141

5.11.4 消息传递 142

5.12 单处理器嵌入式系统的内核 147

5.12.1 非抢占式UP内核 147

5.12.2 非抢占式UP内核的演示 154

5.12.3 抢占式UP内核 154

5.12.4 抢占式UP内核的演示 159

5.13 本章小结 160

思考题 161

参考文献 162

第6章 ARM中的内存管理 163

6.1 进程地址空间 163

6.2 ARM中的内存管理单元 163

6.3 MMU寄存器 164

6.4 访问MMU寄存器 165

6.4.1 启用和禁用MMU 165

6.4.2 域访问控制 166

6.4.3 转换表基址寄存器 166

6.4.4 域访问控制寄存器 167

6.4.5 故障状态寄存器 167

6.4.6 故障地址寄存器 168

6.5 虚拟地址转换 168

6.5.1 转换表基址 168

6.5.2 转换表 168

6.5.3 一级描述符 169

6.6 段引用的转换 169

6.7 页引用的转换 170

6.7.1 一级页表 170

6.7.2 二级页表描述符 170

6.7.3 小页引用的转换 171

6.7.4 大页引用的转换 171

6.8 内存管理示例程序 171

6.8.1 使用1MB的段进行一级分页 172

6.8.2 使用4KB的页进行二级分页 177

6.8.3 具有高VA空间的一级分页 177

6.8.4 具有高VA空间的二级分页 182

6.9 本章小结 184

思考题 184

参考文献 184

第7章 用户模式进程和系统调用 185

7.1 简介 185

7.2 虚拟地址空间映射 185

7.3 用户模式进程 186

7.4 系统内核支持用户模式进程 189

7.4.1 PROC结构 189

7.4.2 复位处理程序 193

7.4.3 内核代码 195

7.4.4 内核编译链接脚本 201

7.4.5 具有用户模式进程的内核的演示 201

7.5 具有用户模式进程的嵌入式系统 202

7.5.1 相同域中的进程 202

7.5.2 相同域中的进程的演示 202

7.5.3 具有单个域的进程 205

7.5.4 具有单个域的进程的演示 205

7.6 RAM磁盘 205

7.6.1 创建RAM磁盘映像 206

7.6.2 进程映像文件加载器 208

7.7 进程管理 210

7.7.1 进程创建 210

7.7.2 进程终止 210

7.7.3 进程族树 211

7.7.4 等待子进程终止 212

7.7.5 UNIX/Linux中的fork-exec 213

7.7.6 fork的实现 213

7.7.7 exec的实现 215

7.7.8 fork-exec的演示 217

7.7.9 用于命令执行的简单sh 219

7.7.10 vfork 220

7.7.11 vfork的演示 221

7.8 线程 222

7.8.1 线程创建 223

7.8.2 线程演示 224

7.8.3 线程同步 225

7.9 具有二级分页的嵌入式系统 225

7.9.1 二级静态分页 227

7.9.2 二级静态分页的演示 229

7.9.3 二级动态分页 229

7.9.4 二级动态分页的演示 231

7.10 KMH内存映射 232

7.10.1 KMH使用一级静态分页 232

7.10.2 KMH使用二级静态分页 236

7.10.3 KMH使用二级动态分页 236

7.11 嵌入式系统支持的文件系统 236

7.11.1 创建SDC映像 237

7.11.2 将SDC分区格式化为文件系统 237

7.11.3 为SDC分区创建循环设备 238

7.12 具有SDC文件系统的嵌入式系统 238

7.12.1 使用信号量的SDC驱动程序 238

7.12.2 使用SDC文件系统的系统内核 242

7.12.3 SDC文件系统的演示 243

7.13 从SDC引导内核映像 244

7.13.1 SDC引导程序 244

7.13.2 从SDC引导内核的演示 248

7.13.3 从SDC引导使用动态分页的内核 249

7.13.4 两阶段引导 250

7.13.5 两阶段引导的演示 251

7.14 本章小结 252

思考题 252

参考文献 253

第8章 嵌入式通用操作系统 254

8.1 什么是通用操作系统 254

8.2 什么是嵌入式通用操作系统 254

8.3 将通用操作系统移植到嵌入式系统 254

8.4 为ARM开发一个嵌入式通用操作系统 255

8.5 EOS的结构 255

8.5.1 硬件平台 255

8.5.2 EOS源文件树 256

8.5.3 EOS内核文件 256

8.5.4 EOS的功能 257

8.5.5 EOS的启动顺序 257

8.5.6 EOS的进程管理 258

8.5.7 EOS的汇编代码 260

8.5.8 EOS的t.c文件 268

8.5.9 进程管理函数 271

8.5.10 管道 272

8.5.11 消息传递 272

8.5.12 消息传递的演示 274

8.6 EOS中的内存管理 274

8.6.1 EOS的内存映射 274

8.6.2 虚拟地址空间 275

8.6.3 内核模式pgdir和页表 275

8.6.4 进程用户模式页表 275

8.6.5 进程切换期间切换pgdir 276

8.6.6 动态分页 276

8.7 异常和信号处理 277

8.8 EOS中的信号处理 279

8.8.1 PROC资源中的信号 279

8.8.2 EOS中的信号来源 279

8.8.3 传递信号给进程 279

8.8.4 更改内核中的信号处理程序 279

8.8.5 EOS内核中的信号处理 280

8.8.6 在用户模式下调度信号捕捉器 280

8.9 设备驱动程序 281

8.10 EOS中的进程调度 281

8.11 EOS中的计时器服务 282

8.12 文件系统 283

8.12.1 文件操作级别 283

8.12.2 文件I/O操作 285

8.12.3 EOS中的EXT2文件系统 291

8.12.4 *一级FS的实现 293

8.12.5 *二级FS的实现 300

8.12.6 第三级FS的实现 305

8.13 块设备的I/O缓冲 307

8.14 I/O缓冲区管理算法 308

8.15 用户界面 310

8.15.1 init程序 311

8.15.2 login程序 311

8.15.3 sh程序 312

8.16 EOS的演示 312

8.16.1 EOS的启动 312

8.16.2 EOS的命令处理 313

8.16.3 EOS的信号和异常处理 314

8.17 本章小结 315

思考题 315

参考文献 316

第9章 嵌入式系统中的多处理器 317

9.1 多处理器 317

9.2 SMP系统的需求 317

9.3 ARM MPCore处理器 318

9.4 ARM Cortex-A9 MPCore处理器 319

9.4.1 处理器的核心 319

9.4.2 监听控制单元 319

9.4.3 通用中断控制器 320

9.5 GIC编程示例 320

9.5.1 配置GIC以路由中断 320

9.5.2 GIC配置代码说明 327

9.5.3 中断优先级和中断屏蔽 328

9.5.4 GIC编程的演示 328

9.6 ARM MPCore的启动顺序 328

9.6.1 原始启动顺序 328

9.6.2 引导程序辅助下的启动顺序 329

9.6.3 在虚拟机上引导SMP 329

9.7 ARM SMP启动示例 329

9.7.1 ARM SMP启动示例1 329

9.7.2 ARM SMP启动示例1的演示 335

9.7.3 ARM SMP启动示例2 335

9.7.4 ARM SMP启动示例2的演示 337

9.8 SMP的临界区 337

9.8.1 SMP临界区的实现 337

9.8.2 XCHG/SWAP操作的缺点 338

9.8.3 SMP的ARM同步指令 338

9.9 SMP中的同步原语 339

9.9.1 自旋锁 339

9.9.2 自旋锁示例 340

9.9.3 使用自旋锁启动SMP的演示 341

9.9.4 SMP中的互斥锁 341

9.9.5 使用自旋锁实现互斥锁 342

9.9.6 使用互斥锁启动SMP的演示 343

9.10 全局计时器和本地计时器 344

9.11 SMP中的信号量 347

9.12 条件锁定 348

9.12.1 条件自旋锁 349

9.12.2 条件互斥锁 349

9.12.3 条件信号量操作 350

9.13 SMP中的内存管理 350

9.13.1 SMP中的内存管理模型 351

9.13.2 统一VA空间 351

9.13.3 非统一VA空间 354

9.13.4 非统一VA空间中的并行计算 356

9.14 SMP中的多任务 359

9.15 用于进程管理的SMP内核 360

9.15.1 ts.s文件 361

9.15.2 t.c文件 367

9.15.3 kernel.c文件 369

9.15.4 SMP中的设备驱动程序和中断处理程序 372

9.15.5 SMP中进程管理的演示 376

9.16 通用SMP操作系统 377

9.16.1 SMP_EOS的组织结构 377

9.16.2 SMP_EOS源文件树 378

9.16.3 SMP_EOS内核文件 378

9.16.4 SMP_EOS中的进程管理 379

9.16.5 保护SMP中的内核数据结构 380

9.16.6 SMP中的死锁预防 382

9.16.7 调整UP算法以适用于SMP 384

9.16.8 SMP中的设备驱动程序和中断处理程序 384

9.17 SMP_EOS演示系统 385

9.17.1 SMP_EOS的启动顺序 385

9.17.2 SMP_EOS的功能 386

9.17.3 SMP_EOS的演示 386

9.18 本章小结 386

思考题 387

参考文献 388

  • 10章 嵌入式实时操作系统 389

10.1 RTOS的概念 389

10.2 RTOS中的任务调度 389

10.2.1 速率单调调度 389

10.2.2 *早截止期限优先调度 390

10.2.3 截止期限单调调度 390

10.3 优先级倒置 391

10.4 优先级倒置的预防 391

10.4.1 优先级上限 392

10.4.2 优先级继承 392

10.5 RTOS的概况 392

10.5.1 FreeRTOS 392

10.5.2 MicroC/OS 393

10.5.3 NuttX 393

10.5.4 VxWorks 394

10.5.5 QNX 395

10.5.6 实时Linux 395

10.5.7 现有RTOS的评价 397

10.6 RTOS的设计原则 400

10.6.1 中断处理 400

10.6.2 任务管理 400

10.6.3 任务调度 400

10.6.4 同步工具 400

10.6.5 任务通信 400

10.6.6 内存管理 401

10.6.7 文件系统 401

10.6.8 跟踪与调试 401

10.7 单处理器RTOS 401

10.7.1 UP_RTOS的任务管理 401

10.7.2 UP_RTOS的任务同步 402

10.7.3 UP_RTOS的任务调度 402

10.7.4 UP_RTOS的任务间通信 403

10.7.5 临界区的保护 403

10.7.6 文件系统和日志 403

10.7.7 具有静态周期性任务和循环调度的UP_RTOS 404

10.7.8 具有静态周期性任务和抢占式调度的UP_RTOS 416

10.7.9 具有共享资源的动态任务的UP_RTOS 422

10.8 多处理器RTOS 429

10.8.1 用于任务管理的SMP_RTOS内核 430

10.8.2 调整UP_RTOS以适应SMP 446

10.8.3 SMP_RTOS的嵌套中断 449

10.8.4 SMP_RTOS的抢占式任务调度 450

10.8.5 基于SGI的任务切换 451

10.8.6 SMP_RTOS的分时任务调度演示 453

10.8.7 SMP_RTOS的抢占式任务调度演示 455

10.8.8 优先级继承 458

10.8.9 SMP_RTOS系统的演示 460

10.9 本章小结 464

思考题 464

参考文献 465

参考文献