当前位置:首页 > 工业技术
嵌入式ARM开发实战
嵌入式ARM开发实战

嵌入式ARM开发实战PDF电子书下载

工业技术

  • 电子书积分:13 积分如何计算积分?
  • 作 者:(美)兰布里奇著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2015
  • ISBN:9787302396192
  • 页数:362 页
图书介绍:本书全面、系统地介绍了ARM处理器的体系结构和开发技术,内容包括:ARM处理器的演进历史、ARM嵌入式系统、ARM体系结构、ARM汇编语言、开发第一步、Thumb指令集、汇编指令、NEON、调试、编写优化的C代码,附录中介绍了术语表、ARM版本、ARM核心版本、NEON数据结构及指令、汇编指令等,可供读者快速查阅。
《嵌入式ARM开发实战》目录

第Ⅰ部分 ARM系统和开发 3

第1章 ARM发展史 3

1.1 ARM的起源 4

1.1.1 Acorn决定创建新处理器的理由 6

1.1.2 Acorn变成ARM的原因 7

1.1.3 ARM不实际生产微处理器的原因 8

1.2 ARM的命名约定 10

1.2.1 如何辨别正在使用的处理器 11

1.2.2 ARM7TDMI和ARM926EJ-S处理器的差异 13

1.2.3 ARM7和ARMv7的差异 15

1.2.4 Cortex-M和Cortex-A的差异 15

1.3 制造商文献资料 16

1.4 ARM在今天都做些什么 16

1.5 本章小结 17

第2章 ARM嵌入式系统 19

2.1 ARM嵌入式系统的定义 22

2.1.1 芯片上的系统 23

2.1.2 嵌入式系统和系统程序设计之间的区别 24

2.1.3 优化的重要性 25

2.1.4 RISC架构的优势 29

2.2 选择合适的处理器 32

2.3 如何着手 34

2.3.1 可用的电路板 35

2.3.2 现有操作系统 38

2.3.3 最适合我的目的的编译器 39

2.3.4 准备进行调试 40

2.3.5 是否有完整的开发环境 41

2.3.6 还需要知道什么 42

2.4 本章小结 43

第3章 ARM架构 45

3.1 理解基础知识 46

3.1.1 寄存器 47

3.1.2 堆栈 48

3.1.3 内部RAM 48

3.1.4 缓存 49

3.2 开始了解不同的ARM子系统 51

3.2.1 处理器寄存器介绍 51

3.2.2 CPSR介绍 55

3.2.3 计算单元 57

3.2.4 流水线 58

3.2.5 紧耦合存储器 60

3.2.6 协处理器 61

3.3 理解不同的概念 62

3.3.1 异常的概念 62

3.3.2 处理不同的异常 65

3.3.3 操作模式 66

3.3.4 向量表 68

3.3.5 存储器管理 70

3.4 不同的技术 73

3.4.1 JTAG调试(D) 73

3.4.2 增强的DSP(E) 73

3.4.3 向量浮点(F) 74

3.4.4 EmbeddedICE(I) 75

3.4.5 Jazelle(J) 75

3.4.6 长乘法(M) 75

3.4.7 Thumb(T) 76

3.4.8 合成器(S) 76

3.4.9 TrustZone 77

3.4.10 NEON 78

3.4.11 big.LITTLE 78

3.5 本章小结 80

第4章 ARM汇编语言 81

4.1 汇编语言介绍 82

4.2 与计算机对话 82

4.3 学习汇编语言的理由 84

4.3.1 速度 85

4.3.2 空间 87

4.3.3 趣味性 88

4.3.4 编译器并不完美 88

4.3.5 通过汇编语言理解计算机科学 89

4.3.6 使用汇编语言编写 89

4.4 使用汇编语言 90

4.4.1 编写启动加载程序 90

4.4.2 逆向工程 91

4.4.3 优化 92

4.5 ARM汇编语言 93

4.5.1 指令格式 93

4.5.2 布局 94

4.5.3 条件代码 94

4.5.4 更新条件标志 98

4.5.5 寻址模式 101

4.6 ARM汇编语言基础 105

4.6.1 加载和存储 105

4.6.2 值的设置 105

4.6.3 分支 105

4.6.4 数学 106

4.6.5 理解一个示范程序 106

4.7 本章小结 108

第5章 ARM入门 109

5.1 Hello World! 110

5.2 刨根问底 115

5.3 Hello World,这次来真的 118

5.4 软件实现 123

5.5 存储器映射 125

5.6 实际例子 129

5.6.1 Silicon Labs公司的STK3800 129

5.6.2 Silicon Labs公司的STK3200 135

5.6.3 Atmel公司的D20 Xplained Pro 144

5.7 案例分析:U-BOOT 154

5.8 机器学习:Raspberry Pi 156

5.8.1 引导程序 157

5.8.2 为Raspberry Pi编译程序 158

5.8.3 接下来做什么 159

5.9 本章小结 160

第6章 Thumb指令集 161

6.1 Thumb 163

6.2 Thumb-2技术 164

6.3 Thumb的执行方式 164

6.4 使用Thumb的优点 166

6.5 使用Thumb的内核 168

6.6 ARM-Thumb交互工作 171

6.7 Thumb-1介绍 172

6.7.1 可用的寄存器 172

6.7.2 被移除的指令 173

6.7.3 没有条件语句 174

6.7.4 设置标志 174

6.7.5 没有桶形移位器 174

6.7.6 简化的立即数 175

6.7.7 栈操作 175

6.8 Thumb-2介绍 175

6.8.1 新的指令 176

6.8.2 协处理器 178

6.8.3 DSP 178

6.8.4 FPU 178

6.9 编写Thumb程序 179

6.10 本章小结 180

第7章 汇编指令 183

7.1 传送指令 184

7.1.1 MOV 184

7.1.2 MVN 185

7.1.3 MOVW 186

7.1.4 MOVT 186

7.1.5 NEG 186

7.1.6 示例:从指令流加载32位常量 187

7.2 算术运算 189

7.2.1 ADD 190

7.2.2 ADC 190

7.2.3 SUB 191

7.2.4 SBC 191

7.2.5 RSB 191

7.2.6 RSC 192

7.2.7 示例:基本数学运算 192

7.3 饱和算术运算 193

7.3.1 QADD 194

7.3.2 QSUB 194

7.3.3 QDADD 194

7.3.4 QDSUB 195

7.4 数据传递 195

7.4.1 LDR 196

7.4.2 STR 197

7.4.3 示例:字符串复制 197

7.5 逻辑运算 198

7.5.1 AND 198

7.5.2 EOR 198

7.5.3 ORR 199

7.5.4 BIC 199

7.5.5 CLZ 199

7.6 比较运算 199

7.6.1 CMP 200

7.6.2 CMN 200

7.6.3 TST 200

7.6.4 TEQ 200

7.7 分支 201

7.7.1 B 201

7.7.2 BL 202

7.7.3 BX 202

7.7.4 BLX 203

7.7.5 示例:计数到零 203

7.7.6 示例:Thumb交互工作 203

7.7.7 MOV pc,lr是什么 204

7.8 乘法 205

7.8.1 MUL 205

7.8.2 MLA 205

7.8.3 UMULL 206

7.8.4 UMLAL 206

7.8.5 SMULL 206

7.8.6 SMLAL 206

7.9 除法 207

7.9.1 SDIV 208

7.9.2 UDIV 208

7.10 多寄存器数据传递 208

7.10.1 STM 210

7.10.2 LDM 210

7.11 桶形移位器 210

7.11.1 LSL 211

7.11.2 LSR 212

7.11.3 ASR 212

7.11.4 ROR 212

7.11.5 RRX 212

7.12 堆栈操作 213

7.12.1 PUSH 213

7.12.2 POP 213

7.12.3 示例:从子例程中返回 213

7.13 协处理器指令 214

7.13.1 MRC 214

7.13.2 MCR 215

7.14 其他指令 216

7.14.1 SVC 216

7.14.2 NOP 216

7.14.3 MRS 216

7.14.4 MSR 217

7.15 本章小结 217

第8章 NEON 219

8.1 NEON的优点 220

8.2 NEON支持的数据类型 222

8.3 用汇编语言使用NEON 223

8.3.1 寄存器的使用 223

8.3.2 加载和存储数据 224

8.3.3 优化存储器复制 229

8.3.4 NEON指令 230

8.4 在C语言中使用NEON 231

8.4.1 内部函数描述 232

8.4.2 使用NEON内部函数 235

8.4.3 将图像转换为灰度图像 235

8.5 本章小结 239

第9章 调试 241

9.1 调试器介绍 242

9.1.1 调试器的作用 242

9.1.2 ARM的调试功能 243

9.2 调试的类型 246

9.2.1 循环 246

9.2.2 例程 247

9.2.3 中断控制器 247

9.2.4 引导程序 247

9.3 调试器 248

9.3.1 GNU调试器 248

9.3.2 J-Link gdb调试器 250

9.4 调试例程 251

9.4.1 无限循环 251

9.4.2 未知异常 254

9.4.3 被零除 255

9.5 深入分析 256

9.5.1 数据中止 256

9.5.2 损坏的串行线路 258

9.5.3 64位计算 260

9.5.4 实时响应 262

9.6 本章小结 263

第10章 编写优化C程序 265

10.1 代码优化规则 266

10.1.1 不要一开始就优化 266

10.1.2 了解编译器 266

10.1.3 了解你的代码 267

10.2 性能分析 267

10.2.1 基于操作系统的性能分析 268

10.2.2 基于裸机的性能分析 269

10.3 C语言优化 272

10.3.1 基本例子 273

10.3.2 计数下降,不是上升 277

10.3.3 整数 278

10.3.4 除法 278

10.3.5 不要使用太多参数 279

10.3.6 指针,而不是对象 280

10.3.7 不要频繁地更新系统存储器 280

10.3.8 对齐 281

10.4 汇编优化 281

10.4.1 特定例程 282

10.4.2 处理中断 282

10.5 硬件配置优化 284

10.5.1 频率调节 284

10.5.2 配置缓存 284

10.6 本章小结 287

第Ⅱ部分 参考 291

附录A 术语 291

A.1 分支预测 291

A.2 缓存 292

A.3 缓存命中 292

A.4 缓存行 293

A.5 缓存缺失 293

A.6 协处理器 293

A.7 CP10 294

A.8 CP11 294

A.9 CP14 294

A.10 CP15 294

A.11 循环 295

A.12 异常 295

A.13 中断 295

A.14 Jazelle 296

A.15 JTAG 296

A.16 MIPS 296

A.17 NEON 297

A.18 失序执行 297

A.19 流水线 297

A.20 寄存器 298

A.21 SIMD 298

A.22 SOC 298

A.23 综合器 299

A.24 TrustZone 299

A.25 向量表 299

附录B ARM架构版本 301

B.1 ARMv1 302

B.2 ARMv2 303

B.3 ARMv3 303

B.4 ARMv4 305

B.5 ARMv5 305

B.6 ARMv6 306

B.7 ARMv6-M 306

B.8 ARMv7-A/R 307

B.9 ARMv7-M 307

B.10 ARMv8 308

附录C ARM内核版本 309

C.1 ARM6 309

C.2 ARM7 310

C.3 ARM7TDMI 310

C.4 ARM8 311

C.5 StrongARM 311

C.6 ARM9TDMI 312

C.7 ARM9E 313

C.8 ARM10 313

C.9 XSCALE 314

C.10 ARM11 314

C.11 Cortex 315

C.11.1 Cortex-A 316

C.11.2 Cortex-R 320

C.11.3 Cortex-M 321

附录D NEON内联函数和指令 325

D.1 数据类型 325

D.2 数据通道类型 326

D.3 汇编语言指令 327

D.4 内联函数命名规则 331

附录E 汇编语言指令 333

E.1 ARM指令 333

E.1.1 算术运算指令 333

E.1.2 并行运算 337

E.1.3 传送 339

E.1.4 加载 340

E.1.5 存储 342

E.1.6 逻辑 343

E.1.7 比较 344

E.1.8 饱和 344

E.1.9 分支 345

E.1.10 扩展 347

E.1.11 其他 349

E.2 Cortex-M内核中的Thumb指令 351

返回顶部