微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > ARM认证工程师应试指南(通联物网编写)

ARM认证工程师应试指南(通联物网编写)

时间:10-02 整理:3721RD 点击:
作者简介:奚海蛟,男,北京航空航天大学博士、博士后,2000年开始在多个大型培训机构和高校任讲师,主讲的课程有信号与系统、通信原理、游戏客户端开发、3D数学、嵌入式移植、嵌入式驱动程序设计、ARM体系结构开发、物联网等;2009创建北京融慧广泽科技有限公司,2010年创建北京通联物网教育咨询有限公司合伙人,总经理。
本书是针对ARM AAE考试认证编写的,旨在为对参加AAE认证考试的读者提供有益的帮助,对汇编语言和C语言的程序员提供有用的信息。
    本书分为ARM认证工程师学习指南和Cortex-A系列程序员指南两部分。在ARM认证工程师学习指南部分给出了AAE认证考试的要点及其要求掌握的程度;在Cortex-A系列程序员指南部分对第1部分给出的要点进行了详细论述,内容涵盖:ARM简介,ARM体系结构和处理器,工具、操作系统和开发板,ARM寄存器、模式和指令集,汇编语言简介,ARM/Thumb的统一汇编,浮点,NEON简介,高速缓存,内存管理单元,内存访问排序,异常处理,中断处理,其他异常处理程序,引导代码,移植,应用程序二进制接口,性能分析,优化运行在ARM处理器的代码,编写NEON代码,多重处理器简介,SMP架构考虑,并行软件,并行软件的问题,电源管理,安全性,虚拟化,big.LITTLE简介,调试。
图书目录
第1部分  ARM认证工程师学习指南
第1章  学习指南  2
1.1  ARM认证工程师介绍  2
1.2  ARM认证工程师大纲概述  2
1.3  大纲详述  3
1.3.1  实现  3
1.3.2  软件调试  4
1.3.3  架构  9
1.3.4  软件开发  21
1.3.5  系统  30
1.3.6  软件优化  33
第2部分  Cortex-A系列程序员指南
第2章  ARM简介  38
2.1  ARM的历史  38
2.2  片上系统(SoC)  39
2.3  嵌入式系统  39
第3章  ARM体系结构和处理器  41
3.1  体系结构的版本  42
3.2  体系结构的历史与扩展  42
3.3  ARM Cortex-A系列处理器架构关键点  45
3.4  处理器和路径  46
3.5  Cortex-A系列处理器  47
3.5.1  Cortex-A5处理器  47
3.5.2  Cortex-A7处理器  48
3.5.3  Cortex-A8处理器  48
3.5.4  Cortex-A9处理器  49
3.5.5  Cortex-A15处理器  50
3.5.6  高通公司的Scorpion  51
第4章  工具、操作系统和开发板  52
4.1  Linux发行版  52
4.1.1  ARM的Linux系统  52
4.1.2  Linux术语  53
4.1.3  嵌入式Linux  54
4.1.4  板级支持包  54
4.1.5  Linaro  54
4.2  有用工具  55
4.3  ARM处理器的软件工具链  56
4.4  ARM DS-5  58
4.5  示例平台  60
第5章  ARM寄存器、模式和指令集  61
5.1  指令集  61
5.2  模式  62
5.3  寄存器  62
5.4  指令流水线  64
5.4.1  并发流水线  66
5.4.2  寄存器重命名  66
5.5  分支预测  67
5.5.1  返回栈  67
5.5.2  程序员的观点  68
第6章  汇编语言简介  69
6.1  与其他汇编语言的对比  69
6.2  指令集  70
6.3  GNU汇编器简介  71
6.3.1  激活GNU汇编器  71
6.3.2  GNU汇编器语法  71
6.3.3  程序段  72
6.3.4  编译器的伪指令  72
6.3.5  表达式  73
6.3.6  GNU工具的命名惯例  73
6.4  ARM工具汇编语言  73
6.4.1  ARM汇编语法  74
6.4.2  标签  74
6.4.3  伪指令  74
6.5  交互工作  75
6.6  识别汇编代码  76
第7章  ARM/Thumb的统一汇编语言指令  77
7.1  指令集基础  77
7.1.1  常量的值  77
7.1.2  条件执行  78
7.1.3  状态标志位和条件码  80
7.2  数据处理操作  80
7.3  乘法运算  82
7.4  存储器指令  83
7.4.1  寻址方式  84
7.4.2  多指令传送  84
7.5  分支指令  85
7.6  整数SIMD指令  85
7.6.1  整数寄存器SIMD指令  86
7.6.2  整数寄存器SIMD乘法  86
7.6.3  绝对差之和  87
7.6.4  数据打包和解包  87
7.6.5  字节选择  88
7.7  饱和算法  88
7.8  杂项指令  88
7.8.1  协处理器指令  88
7.8.2  协处理器15(CP15)  89
7.8.3  SVC  90
7.8.4  修改PSR  91
7.8.5  位操作  91
7.8.6  高速缓存预加载  91
7.8.7  字节反转  91
7.8.8  其他指令  92
第8章  浮点  93
8.1  浮点运算的基本知识以及IEEE 754标准  93
8.1.1  舍入算法  95
8.1.2  ARM VFP  95
8.1.3  指令  97
8.1.4  启用VFP  97
8.2  GCC对VFP的支持  97
8.3  ARM编译器对VFP的支持  98
8.4  Linux对VFP的支持  98
8.5  浮点优化  99
第9章  NEON简介  100
9.1  SIMD  100
9.2  NEON结构概述  101
9.2.1  VFP的通用性  102
9.2.2  数据类型  102
9.2.3  NEON寄存器  102
9.2.4  NEON指令集  104
第10章  高速缓存  106
10.1  为什么高速缓存卓有成效  107
10.2  高速缓存的缺点  107
10.3  存储器层次  107
10.4  高速缓存的结构  108
10.4.1  高速缓存控制器  109
10.4.2  直接映射高速缓存  109
10.4.3  Set关联高速缓存  110
10.4.4  高速缓存术语  111
10.4.5  现实中的例子  112
10.4.6  虚拟和物理的标签和索引  112
10.5  缓存策略  113
10.5.1  分配策略  113
10.5.2  替换策略  113
10.5.3  写策略  114
10.6  写缓冲区和取缓冲区  114
10.7  缓存的性能和命中率  115
10.8  无效化和清空缓存  115
10.9  一致点和统一点  116
10.10  二级缓存控制器  117
10.11  奇偶校验和ECC高速缓存  117
第11章  内存管理单元  118
11.1  虚拟内存  119
11.2  一级页表  120
11.3  二级页表  122
11.4  转换查找缓冲区  123
11.5  TLB的一致性  124
11.6  页大小的选择  124
11.7  内存属性  125
11.7.1  内存访问权限  125
11.7.2  内存类型  125
11.7.3  域  126
11.8  多任务和操作系统使用的页表  127
11.8.1  地址空间ID  127
11.8.2  页表基址寄存器0和1  128
11.8.3  快速上下文切换扩展  128
11.9  大物理地址扩展  129
第12章  内存访问排序  131
12.1  ARM存储排序模型  132
12.1.1  Strongly-ordered和Device内存  132
12.1.2  Normal内存  133
12.2  内存隔离  134
12.2.1  内存隔离使用示例  135
12.2.2  用隔离避免死锁  136
12.2.3  WFE和WFI的隔离  137
12.2.4  Linux下使用的隔离  137
12.3  缓存一致性问题  138
12.3.1  复制代码的问题  138
12.3.2  编译器的重新排序优化  138
第13章  异常处理  139
13.1  异常类型  140
13.2  异常模式一览  141
13.3  进入异常处理程序  142
13.4  退出异常处理程序  143
13.5  向量表  143
13.6  返回指令  143
第14章  中断处理  144
14.1  外部中断请求  144
14.1.1  中断分配  145
14.1.2  简单中断处理  145
14.1.3  中断嵌套处理  145
14.2  通用中断控制器  146
14.2.1  配置  147
14.2.2  初始化顺序  147
14.2.3 中断处理  147
第15章  其他异常处理程序  149
15.1  中止异常处理程序  149
15.2  未定义指令处理  149
15.3  SVC异常处理  150
15.4  LINUX的异常程序流  150
15.4.1  引导过程  151
15.4.2  中断调度  151
第16章  引导代码  152
16.1  启动一个裸机系统  152
16.2  配置  156
16.3  引导LINUX  156
16.3.1  复位异常处理  157
16.3.2  引导程序  157
16.3.3  初始化内存系统  157
16.3.4  内核镜像  157
16.3.5  内核参数  158
16.3.6  内核入口  158
16.3.7  平台的具体行为  158
16.3.8  内核启动代码  158
第17章  移植  160
17.1  大小端  160
17.2  对齐  163
17.3  其他的C代码移植问题  164
17.3.1  unsigned char和signed char  164
17.3.2  编译器packing结构体  164
17.3.3  堆栈的使用  165
17.3.4  其他问题  166
17.4  移植ARM的汇编代码到ARMV-7  166
17.5  移植ARM代码到THUMB架构  167
17.5.1  使用PC作为操作数  167
17.5.2  分支和互连  167
17.5.3  操作数组合  168
17.5.4  ARM/Thumb的其他差异  169
第18章  应用程序二进制接口  170
18.1  过程调用标准  170
18.1.1  VFP和NEON寄存器的使用  173
18.1.2  链接  174
18.1.3  栈和堆  175
18.1.4  返回结果  175
18.2  C和汇编代码混合编程  175
第19章  性能分析  178
19.1  分析器输出  179
19.2  Gprof  179
19.3  OProfile  180
19.4  DS-5 Streamline  180
19.5  ARM性能监视器  181
19.6  Linux的Perf事件  182
19.7  Ftrace  182
19.8  Valgrind和Cachegrind  182
第20章  优化运行在ARM处理器的代码  183
20.1  编译器优化  184
20.1.1  函数内联  184
20.1.2  消除公共子表达式  184
20.1.3  循环展开  185
20.1.4  GCC优化选项  186
20.1.5  armcc优化选项  187
20.2  ARM存储系统优化  187
20.2.1  数据缓存优化  188
20.2.2  循环分片  188
20.2.3  循环交换  189
20.2.4  结构对齐  189
20.2.5  关联性的影响  190
20.2.6  优化指令缓存的使用  190
20.2.7  优化L2和外部缓存的使用  191
20.2.8  优化TLB的使用  191
20.2.9  数据中止优化  191
20.2.10  预取内存块访问  192
20.3  修改源代码  192
20.3.1  循环结束  192
20.3.2  循环合并  192
20.3.3  减少堆和栈的使用  193
20.3.4  变量选择  193
20.3.5  指针别名  194
20.3.6  除法和取模  195
20.3.7  外部数据  195
20.3.8  内联或嵌入汇编  195
20.3.9  复杂寻址模式  195
20.3.10  非对齐访问  196
20.3.11  链接器优化  196
第21章  编写NEON代码  197
21.1  NEON C编译器和汇编器  197
21.1.1  矢量化  197
21.1.2  NEON库  197
21.1.3  内部函数  198
21.1.4  C的NEON类型  198
21.1.5  变量和常量  199
21.1.6  从C/C++代码生成NEON指令  199
21.1.7  NEON汇编器和ABI的限制  200
21.1.8  检测NEON  200
21.2  优化NEON汇编代码  201
21.2.1  内存访问优化  201
21.2.2  对齐  202
21.2.3  调度  202
21.3  NEON省电  202
第22章  多重处理器简介  204
22.1  多处理器ARM系统  205
22.2  对称多重处理  206
22.3  非对称多重处理AMP  207
第23章  SMP架构考虑  209
23.1  缓存一致性  209
23.1.1  MESI协议  210
23.1.2  MOESI协议  210
23.1.3  ACP  211
23.2  TLB和缓存维护广播  211
23.3  在SMP系统中处理中断  212
23.4  独占访问  212
23.5  引导SMP系统  215
23.5.1  处理器ID  215
23.5.2  Linux中SMP启动  216
23.6  私有内存区域  216
第24章  并行软件  218
24.1  分解法  218
24.2  线程模型  219
24.3  线程库  220
24.3.1  线程间的通信  222
24.3.2  线程性能  222
24.3.3  线程关联  222
24.4  Linux内核中的同步机制  222
24.4.1  结束(Completions)机制  222
24.4.2  自旋锁  223
24.4.3  信号量  223
24.4.4  无锁同步  223
第25章  并行软件的问题  224
25.1  线程安全性和可重入性  224
25.2  性能问题  225
25.2.1  带宽问题  225
25.2.2  线程依赖性  225
25.2.3  缓存抖动  226
25.2.4  伪共享  226
25.2.5  死锁和活锁  226
25.3  剖析SMP系统  226
第26章  电源管理  227
26.1  待机模式  228
26.2  休眠模式  228
26.3  汇编语言电源指令  229
26.4  动态电压和频率调整  229
第27章  安全性  230
27.1  可信区的硬件架构  230
27.2  多处理器系统的安全性扩展  232
27.3  正常世界和安全世界的相互作用  233
第28章  虚拟化  235
28.1  用于ARMV7-A的虚拟化扩展  236
28.1.1  在ARMv7-A的虚拟化扩展中的权限模型  236
28.1.2  超级管理模式  236
28.1.3  内存转换  237
28.2  超级监控程序异常模型  237
28.3  虚拟化和ARM安全扩展之间的关系  238
第29章  big.LITTLE简介  239
29.1  big.LITTLE配置  239
29.2  big.LITTLE系统的结构  240
29.3  big.LITTLE中的执行模型  241
29.3.1  big.LITTLE迁移模型  241
29.3.2  集群迁移  242
29.3.3  CPU迁移  243
29.4  big.LITTLE MP操作  244
第30章  调试  245
30.1  ARM调试硬件  245
30.2  ARM跟踪硬件  246
30.3  调试监视器  248
30.4  调试Linux应用程序  248
30.5  DS-5的调试和跟踪  249
30.5.1  使用DS-5调试Linux应用程序  250
30.5.2  调试Linux内核模块  250
30.5.3  使用DS-5调试Linux内核  251
30.5.4  使用DS-5调试多线程应用程序  251
30.5.5  调试共享库  251
30.5.6  DS-5的跟踪支持  251
参考文献  254

购买地址:http://product.dangdang.com/1150787806.html

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top