《ARM嵌入式系统开发 软件设计与优化》PDF下载

  • 购买积分:18 如何计算积分?
  • 作  者:(美)Andrew N.Sloss,(英)Dominic Symes,(美)Chris Wright著;沈建华译
  • 出 版 社:北京:北京航空航天大学出版社
  • 出版年份:2005
  • ISBN:7810776525
  • 页数:644 页
图书介绍:本书从软件设计的角度,全面、系统地介绍了ARM处理器的基本体系结构和软件设计与优化方法。包括ARM处理器基础;C语言与汇编语言程序的设计与优化等。

第1章 基于ARM的嵌入式系统 1

1.1 RISC设计思想 2

1.2 ARM设计思想 3

1.3 嵌入式系统的硬件 5

1.3.1 ARM总线技术 6

1.3.2 AMBA总线协议 6

1.3.3 存储器 7

1.3.4 外设 9

1.4 嵌入式系统的软件 10

1.4.1 初始化(启动)代码 10

1.4.2 操作系统 11

1.4.3 应用程序 12

1.5 总结 12

第2章 ARM处理器基础 14

2.1 寄存器 16

2.2 当前程序状态寄存器 17

2.2.1 处理器模式 18

2.2.2 分组寄存器 18

2.2.3 状态和指令集 21

2.2.4 中断屏蔽 22

2.2.5 条件标志 22

2.2.6 条件执行 24

2.3 流水线 24

2.4 异常、中断及向量表 27

2.5 内核扩展 28

2.5.1 cache和紧耦合存储器 29

2.5.2 存储管理 30

2.5.3 协处理器 31

2.6 体系结构的不同版本 31

2.6.1 命名规则 32

2.6.2 体系结构的发展 33

2.7 ARM处理器系列 34

2.7.1 ARM7系列 35

2.7.2 ARM9系列 36

2.7.3 ARM10系列 37

2.7.4 ARM11系列 37

2.7.5 专用处理器 37

2.8 总结 38

第3章 ARM指令集 39

3.1 数据处理指令 42

3.1.1 MOVE指令 42

3.1.2 桶形移位器 43

3.1.3 算术指令 46

3.1.4 算术指令使用桶形移位器 47

3.1.5 逻辑指令 48

3.1.6 比较指令 49

3.1.7 乘法指令 50

3.2 分支指令 51

3.3 load-store指令 53

3.3.1 单寄存器传送指令 53

3.3.2 单寄存器load-store指令的寻址方式 54

3.3.3 多寄存器传送指令 57

3.3.4 交换指令 65

3.4 软件中断指令 66

3.5 程序状态寄存器指令 68

3.5.1 协处理器指令 69

3.5.2 协处理器15(CP15)指令语法 70

3.6 常量的装载 71

3.7 ARMv5E扩展 72

3.7.1 零计数指令 73

3.7.2 饱和算术指令 73

3.7.3 ARMv5E乘法指令 74

3.8 条件执行 75

3.9 总结 77

第4章 Thumb指令集 78

4.1 Thumb寄存器的使用 81

4.2 ARM-Thumb交互 82

4.3 其它分支指令 84

4.4 数据处理指令 84

4.5 单寄存器load-store指令 87

4.6 多寄存器load-store指令 89

4.7 堆栈指令 90

4.8 软件中断指令 91

4.9 总结 92

第5章 高效的C编程 93

5.1 C编译器及其优化概述 94

5.2 基本的C数据类型 96

5.2.1 局部变量类型 97

5.2.2 函数参数类型 101

5.2.3 有符号数与无符号数 103

5.3 C循环结构 104

5.3.1 固定次数的循环 104

5.3.2 不定次数的循环 107

5.3.3 循环展开 108

5.4 寄存器分配 111

5.5 函数调用 113

5.6 指针别名 117

5.7 结构体安排 120

5.8 位域 124

5.9 边界不对齐数据和字节排列方式(大/小端) 127

5.10 除法 131

5.10.1 带余数的无符号重复除法 133

5.10.2 把除转换为乘 133

5.10.3 除数是常数的无符号除法 136

5.10.4 除数是常数的有符号除法 137

5.11 浮点运算 140

5.12 内联函数和内嵌汇编 140

5.13 移植问题 144

5.14 总结 145

第6章 ARM汇编与优化 147

6.1 编写汇编代码 148

6.2 性能分析和周期计数 154

6.3 指令调整 154

6.4 寄存器分配 162

6.4.1 分配变量给寄存器 163

6.4.2 使用超过14个的局部变量 166

6.4.3 最大限度地使用寄存器 168

6.5 条件执行 172

6.6 循环结构 174

6.6.1 减计数循环 174

6.6.2 展开计数循环 175

6.6.3 多层嵌套循环 178

6.6.4 其它计数循环 181

6.7 位操作 182

6.7.1 固定宽度的位域打包和解包 182

6.7.2 可变宽度编码的位流打包 183

6.7.3 可变宽度编码的位流解包 186

6.8 高效的switch 188

6.8.1 在范围0≤x<N的switch 189

6.8.2 基于通用变量x的switch 191

6.9 边界不对齐数据的处理 192

6.10 总结 196

第7章 基本运算优化 197

7.1 双精度整数乘法 198

7.1.1 长整型乘法 199

7.1.2 128位结果的无符号64位乘法 200

7.1.3 128位结果的有符号64位整数乘法 201

7.2 整数规格化和前导0计数 203

7.2.1 ARMv5及以上体系结构的整数规格化 203

7.2.2 在ARMv4体系结构上的规格化 204

7.2.3 后缀0计数 206

7.3 除法 208

7.3.1 通过试探减法实现无符号数除法 208

7.3.2 无符号整数的Newton-Raphson除法 215

7.3.3 无符号小数Newton-Raphson除法 221

7.3.4 有符号数除法 228

7.4 平方根 229

7.4.1 通过试探减法计算平方根 229

7.4.2 使用Newton-Raphson迭代计算平方根 231

7.5 超越函数:log,exp,sin,cos 233

7.5.1 以2为底的对数运算 233

7.5.2 2的乘幂 235

7.5.3 三角函数 236

7.6 字节顺序反转和位操作 239

7.6.1 字节顺序反转 240

7.6.2 位变换 240

7.6.3 ‘1’位计数 243

7.7 饱和及舍入运算 244

7.7.1 饱和32位数到16位 245

7.7.2 饱和左移 245

7.7.3 舍入右移 245

7.7.4 饱和的32位加减法 245

7.7.5 饱和绝对值 246

7.8 随机数产生 246

7.9 总结 247

第8章 数字信号处理 248

8.1 表示一个数字信号 250

8.1.1 选择一种表示方法 250

8.1.2 操作以定点格式存储的值 253

8.1.3 定点信号的加法和减法 254

8.1.4 定点信号的乘法 255

8.1.5 定点信号的除法 256

8.1.6 定点信号的平方根 256

8.1.7 小结:数字信号的表示 256

8.2 基于ARM的DSP介绍 258

8.2.1 ARM7TDMI的DSP 259

8.2.2 ARM9TDMI的DSP 260

8.2.3 StrongARM的DSP 262

8.2.4 ARM9E的DSP 264

8.2.5 ARM10E的DSP 265

8.2.6 Intel Xscale的DSP 267

8.3 FIR滤波器 269

8.4 IIR滤波 284

8.5 离散傅里叶变换 292

8.6 总结 304

第9章 异常和中断处理 306

9.1 异常处理 307

9.1.1 ARM处理器模式及异常 307

9.1.2 向量表 309

9.1.3 异常优先级 310

9.1.4 链接寄存器偏移 311

9.2 中断 313

9.2.1 分配中断 313

9.2.2 中断延迟 314

9.2.3 IRQ与FIQ异常 315

9.2.4 基本的中断堆栈设计与实现 317

9.3 中断处理方法 321

9.3.1 非嵌套中断处理 321

9.3.2 嵌套中断处理 324

9.3.3 可重入中断处理 330

9.3.4 优先级简单中断处理 334

9.3.5 优先级标准中断处理 340

9.3.6 优先级直接中断处理 344

9.3.7 优先级分组中断处理 347

9.3.8 基于VIC FL190的中断服务例程 351

9.4 总结 352

第10章 固件 353

10.1 固件和引导装载程序 354

10.1.1 ARM Firmware Suite 357

10.1.2 Red Hat Redboot 358

10.2 例子:Sandstone 358

10.2.1 Sandstone的目录结构 359

10.2.2 Sandstone的代码结构 359

10.3 总结 364

第11章 嵌入式操作系统 365

11.1 基本模块 366

11.2 实例:简单小型操作系统SLOS 367

11.2.1 SLOS目录结构 368

11.2.2 初始化 369

11.2.3 存储模型 373

11.2.4 中断和异常处理 374

11.2.5 调度程序 378

11.2.6 上下文切换 380

11.2.7 设备驱动程序框架 382

11.3 总结 383

第12章 高速缓冲存储器cache 385

12.1 存储层次和cache 387

12.2 cache结构 390

12.2.1 cache存储器的基本结构 391

12.2.2 cache控制器的基本操作 392

12.2.3 cache与主存的关系 392

12.2.4 组相联 395

12.2.5 写缓冲器 399

12.2.6 cache效率的衡量 399

12.3 cache策略 400

12.3.1 写策略——直写法或回写法 400

12.3.2 cache行替换策略 401

12.3.3 cache失效时的分配策略 404

12.4 协处理器15与cache 405

12.5 清除和清理cache 406

12.5.1 清除cache 407

12.5.2 清理cache 410

12.5.3 清理D-cache 410

12.5.4 使用路和组索引寻址清理D-cache 414

12.5.5 使用test-clean命令清理D-cache 417

12.5.6 在Intel XScale SA-110和Intel StrongARM内核中清理D-cache 418

12.5.7 清理和清除部分cache 421

12.6 cache锁定 426

12.6.1 在cache中锁定代码和数据 427

12.6.2 通过增加路索引来锁定cache 428

12.6.3 使用锁定位锁定cache 433

12.6.4 在Intel XScale SA-110中锁定cache行 437

12.7 cache与软件性能 440

12.8 总结 441

第13章 存储器保护单元MPU 444

13.1 受保护的区域 446

13.1.1 重叠区域 447

13.1.2 背景区域 448

13.2 初始化MPU,cache和写缓冲器 449

13.2.1 定义区域的大小和位置 450

13.2.2 访问权限 453

13.2.3 设置区域的cache和写缓冲器属性 457

13.2.4 使能区域和MPU 460

13.3 MPU系统示例 461

13.3.1 系统需求 462

13.3.2 使用存储器映射分配区域 463

13.3.3 初始化MPU 464

13.3.4 初始化和配置区域 465

13.3.5 完成初始化MPU 468

13.3.6 受保护系统的上下文切换 469

13.3.7 mpuSLOS 470

13.4 总结 470

第14章 存储管理单元 472

14.1 从MPU到MMU 474

14.2 虚存如何工作 474

14.2.1 使用页定义区域 476

14.2.2 多任务和MMU 478

14.2.3 虚存系统的存储器组织 480

14.3 ARM MMU的详情 482

14.4 页表 482

14.4.1 一级页表项 483

14.4.2 L1转换表基地址 484

14.4.3 二级页表项 485

14.4.4 为嵌入式系统选择合适的页大小 486

14.5 转换旁路缓冲器 487

14.5.1 单步页表搜索 487

14.5.2 2步页表搜索 488

14.5.3 TLB操作 489

14.5.4 TLB锁定 490

14.6 域和存储器访问权限 491

14.7 cache和写缓冲器 493

14.8 协处理器CP15和MMU配置 494

14.9 快速上下文切换扩展 496

14.9.1 FCSE如何使用页表和域 497

14.9.2 使用FCSE的提示 499

14.10 示例:一个简单的虚拟存储系统 500

14.10.1 第1步:定义固定的系统软件区域 501

14.10.2 第2步:为每个任务定义虚存映射 502

14.10.3 第3步:在物理存储器中定位区域 503

14.10.4 第4步:定义和定位页表 503

14.10.5 第5步:定义页表和区域数据结构 506

14.10.6 第6步:初始化MMU、Cache和写缓冲器 509

14.10.7 第7步:建立上下文切换程序 524

14.11 MMUSLOS示例 525

14.12 总结 525

第15章 ARM体系结构的发展 527

15.1 ARMv6对高级DSP和SIMD的支持 528

15.1.1 SIMD算法操作 529

15.1.2 打包指令 532

15.1.3 复数运算支持 533

15.1.4 饱和指令 534

15.1.5 绝对差值求和指令 534

15.1.6 双16位乘法指令 535

15.1.7 高位字乘法 536

15.1.8 密码算法乘法扩展 537

15.2 ARMv6增加的系统和多处理器支持 538

15.2.1 混合大小端支持 538

15.2.2 异常处理 538

15.2.3 多处理同步原语(Multipro-cessing Synchronization Primitives) 540

15.3 ARMv6的实现 541

15.4 ARMv6之后的未来技术 543

15.4.1 TrustZone 543

15.4.2 Thumb-2 543

15.5 总结 544

附录A ARM和Thumb汇编指令 546

A.1 如何使用这篇附录 547

A.2 语法 548

A.2.1 可选表达式 548

A.2.2 寄存器 548

A.2.3 立即数 548

A.2.4 条件和标志 549

A.2.5 移位操作 550

A.3 按字母顺序列出ARM和Thumb指令 551

A.4 ARM汇编速查 597

A.4.1 ARM汇编变量 598

A.4.2 ARM汇编标注 599

A.4.3 ARM汇编表达式 600

A.4.4 ARM汇编保留字 601

A.5 GNU汇编快速查询 608

附录B ARM和Thumb指令编码 612

B.1 ARM指令集编码 613

B.2 Thumb指令集编码 618

B.3 程序状态寄存器 620

附录C 处理器与体系结构 622

C.1 ARM命名规则 623

C.2 内核与体系结构 624

附录D 指令周期定时 626

D.1 指令周期定时表的使用 627

D.2 ARM7TDMI指令周期定时 628

D.3 ARM9TDMI指令周期定时 630

D.4 StrongARM1指令周期定时 631

D.5 ARM9E指令周期定时 632

D.6 ARM10E指令周期定时 634

D.7 Intel XScale指令周期定时 636

D.8 ARM11指令周期定时 637

附录E 建议的参考读物 642

E.1 ARM参考 643

E.2 算法参考 643

E.3 存储器管理与cache体系结构(硬件综述与参考) 643

E.4 操作系统参考 644