书籍详情
ARM嵌入式系统开发:软件设计与优化
作者:(美)Andrew N.Sloss等著;沈建华译;沈建华译
出版社:北京航空航天大学出版社
出版时间:2005-05-01
ISBN:9787810776523
定价:¥75.00
购买这本书可以去
内容简介
【内容提要】本书从软件设计的角度,全面、系统地介绍了ARM处理器的基本体系结构和软件设计与优化方法。内容包括:ARM处理器基础;ARM/Thumb指令集;C语言与汇编语言程序的设计与优化;基本运算、操作的优化;基于ARM的DSP;异常与中断处理;固件与嵌入式OS;cache与存储器管理;ARMv6体系结构的特点等。全书内容完整,针对各种不同的ARM内核系统结构都有详尽论述,并有大量的例子和源代码。附录给出了完整的ARMv4/v5/Thumb指令的功能、编码、周期定时以及汇编参考。本书适于从事ARM嵌入式系统教学与研发,或想把其它嵌入式平台的软件移植到ARM平台上去的专业技术人员使用,要求对ARM处理器有一定的了解,并有C语言和汇编语言基础。若在编译原理、操作系统、数字信号处理、计算机体系结构等方面有一定的基础,则效果会更好。本书也可作为嵌入式系统专业方向的本科生和研究生相关课程的教材或教学参考书。【作者简介】Andrew N.Sloss于1992年获得Herefordshire大学(英国)计算机科学学士学位,英国计算机协会认证注册工程师(C.Eng,MBCS)。他已在计算机行业工作了16年,从1987年开始参与有关ARM处理器的研发,在ARM处理器上开发了众多领域的应用项目,积累了丰富的经验。他为Emerald出版集团(英国)设计了首个能够在ARM2和ARM3处理器上运行的针对中文和埃及象形文字的编辑系统。他在ARM公司工作了6个多,目前是ARM在美国加州Los Gatos的技术销售工程师,负责为开发新产品的公司提供建议和支持。【目录】第1章 基于ARM的嵌入式系统1.1 RISC设计思想1.2 ARM设计思想1.3 嵌入式系统的硬件1.3.1 ARM总线技术1.3.2 AMBA总线协议1.3.3 存储器1.3.4 外设1.4 嵌入式系统的软件1.4.1 初始化(启动)代码1.4.2 操作系统1.4.3 应用程序1.5 总结第2章 ARM处理器基础2.1 寄存器2.2 当前程序状态寄存器2.2.1 处理器模式2.2.2 分组寄存器2.2.3 状态和指令集2.2.4 中断屏蔽2.2.5 条件标志2.2.6 条件执行2.3 流水线2.4 异常、中断及向量表2.5 内核扩展2.5.1 cache和紧耦合存储器2.5.2 存储管理2.5.3 协处理器2.6 体系结构的不同版本2.6.1 命名规则2.6.2 体系结构的发展2.7 ARM处理器系列2.7.1 ARM7系列2.7.2 ARM9系列2.7.3 ARM10系列2.7.4 ARM11系列2.7.5 专用处理器2.8 总结第3章 ARM指令集3.1 数据处理指令3.1.1 MOVE指令3.1.2 桶形移位器3.1.3 算术指令3.1.4 算术指令使用桶形移位器3.1.5 逻辑指令3.1.6 比较指令3.1.7 乘法指令3.2 分支指令3.3 loadstore指令3.3.1 单寄存器传送指令3.3.2 单寄存器loadstore指令的寻址方式3.3.3 多寄存器传送指令3.3.4 交换指令3.4 软件中断指令3.5 程序状态寄存器指令3.5.1 协处理器指令3.5.2 协处理器15(CP15)指令语法3.6 常量的装载3.7 ARMv5E扩展3.7.1 零计数指令3.7.2 饱和算术指令3.7.3 ARMv5E乘法指令3.8 条件执行3.9 总结第4章 Thumb指令集4.1 Thumb寄存器的使用4.2 ARM-Thumb交互4.3 其它分支指令4.4 数据处理指令4.5 单寄存器load-store指令4.6 多寄存器load-store指令4.7 堆栈指令4.8 软件中断指令4.9 总结第5章 高效的C编程5.1 C编译器及其优化概述5.2 基本的C数据类型5.2.1 局部变量类型5.2.2 函数参数类型5.2.3 有符号数与无符号数5.3 C循环结构5.3.1 固定次数的循环5.3.2 不定次数的循环5.3.3 循环展开5.4 寄存器分配5.5 函数调用5.6 指针别名5.7 结构体安排5.8 位域5.9 边界不对齐数据和字节排列方式(大/小端)5.10 除法5.10.1 带余数的无符号重复除法5.10.2 把除转换为乘5.10.3 除数是常数的无符号除法5.10.4 除数是常数的有符号除法5.11 浮点运算5.12 内联函数和内嵌汇编5.13 移植问题5.14 总结第6章 ARM汇编与优化6.1 编写汇编代码6.2 性能分析和周期计数6.3 指令调整6.4 寄存器分配6.4.1 分配变量给寄存器6.4.2 使用超过14个的局部变量6.4.3 最大限度地使用寄存器6.5 条件执行6.6 循环结构6.6.1 减计数循环6.6.2 展开计数循环6.6.3 多层嵌套循环6.6.4 其它计数循环6.7 位操作6.7.1 固定宽度的位域打包和解包6.7.2 可变宽度编码的位流打包6.7.3 可变宽度编码的位流解包6.8 高效的switch6.8.1 在范围0≤x 6.8.2 基于通用变量x的switch6.9 边界不对齐数据的处理6.10 总结第7章 基本运算优化7.1 双精度整数乘法7.1.1 长整型乘法7.1.2 128位结果的无符号64位乘法7.1.3 128位结果的有符号64位整数乘法7.2 整数规格化和前导0计数7.2.1 ARMv5及以上体系结构的整数规格化7.2.2 在ARMv4体系结构上的规格化7.2.3 后缀0计数7.3 除法7.3.1 通过试探减法实现无符号数除法7.3.2 无符号整数的NewtonRaphson除法7.3.3 无符号小数NewtonRaphson除法7.3.4 有符号数除法7.4 平方根7.4.1 通过试探减法计算平方根7.4.2 使用NewtonRaphson迭代计算平方根7.5 超越函数:log,exp,sin,cos7.5.1 以2为底的对数运算7.5.2 2的乘幂7.5.3 三角函数7.6 字节顺序反转和位操作7.6.1 字节顺序反转7.6.2 位变换7.6.3‘1’位计数7.7 饱和及舍入运算7.7.1 饱和32位数到16位7.7.2 饱和左移7.7.3 舍入右移7.7.4 饱和的32位加减法7.7.5 饱和绝对值7.8 随机数产生7.9 总结第8章 数字信号处理8.1 表示一个数字信号8.1.1 选择一种表示方法8.1.2 操作以定点格式存储的值8.1.3 定点信号的加法和减法8.1.4 定点信号的乘法8.1.5 定点信号的除法8.1.6 定点信号的平方根8.1.7 小结:数字信号的表示8.2 基于ARM的DSP介绍8.2.1 ARM7TDMI的DSP8.2.2 ARM9TDMI的DSP8.2.3 StrongARM的DSP8.2.4 ARM9E的DSP8.2.5 ARM10E的DSP8.2.6 Intel Xscale的DSP8.3 FIR滤波器8.4 IIR滤波8.5 离散傅里叶变换8.6 总结第9章 异常和中断处理9.1 异常处理9.1.1 ARM处理器模式及异常9.1.2 向量表9.1.3 异常优先级9.1.4 链接寄存器偏移9.2 中断9.2.1 分配中断9.2.2 中断延迟9.2.3 IRQ与FIQ异常9.2.4 基本的中断堆栈设计与实现9.3 中断处理方法9.3.1 非嵌套中断处理9.3.2 嵌套中断处理9.3.3 可重入中断处理9.3.4 优先级简单中断处理9.3.5 优先级标准中断处理9.3.6 优先级直接中断处理9.3.7 优先级分组中断处理9.3.8 基于VIC PL190的中断服务例程9.4 总结第10章 固件10.1 固件和引导装载程序10.1.1 ARM Firmware Suite10.1.2 Red Hat Redboot10.2 例子:Sandstone10.2.1 Sandstone的目录结构10.2.2 Sandstone的代码结构10.3 总结第11章 嵌入式操作系统11.1 基本模块11.2 实例:简单小型操作系统SLOS11.2.1 SLOS目录结构11.2.2 初始化11.2.3 存储模型11.2.4 中断和异常处理11.2.5 调度程序11.2.6 上下文切换11.2.7 设备驱动程序框架11.3 总结第12章 高速缓冲存储器cache12.1 存储层次和cache12.2 cache结构12.2.1 cache存储器的基本结构12.2.2 cache控制器的基本操作12.2.3 cache与主存的关系12.2.4 组相联12.2.5 写缓冲器12.2.6 cache效率的衡量12.3 cache策略12.3.1 写策略——直写法或回写法12.3.2 cache行替换策略12.3.3 cache失效时的分配策略12.4 协处理器15与cache12.5 清除和清理cache12.5.1 清除cache12.5.2 清理cache12.5.3 清理Dcache12.5.4 使用路和组索引寻址清理D-cache12.5.5 使用test-clean命令清理D-cache12.5.6 在Intel XScale SA110和Intel StrongARM内核中清理D-cache12.5.7 清理和清除部分cache12.6 cache锁定12.6.1 在cache中锁定代码和数据12.6.2 通过增加路索引来锁定cache12.6.3 使用锁定位锁定cache12.6.4 在Intel XScale SA110中锁定cache行12.7 cache与软件性能12.8 总结第13章 存储器保护单元MPU13.1 受保护的区域13.1.1 重叠区域13.1.2 背景区域13.2 初始化MPU,cache和写缓冲器13.2.1 定义区域的大小和位置13.2.2 访问权限13.2.3 设置区域的cache和写缓冲器属性13.2.4 使能区域和MPU13.3 MPU系统示例13.3.1 系统需求13.3.2 使用存储器映射分配区域13.3.3 初始化MPU13.3.4 初始化和配置区域13.3.5 完成初始化MPU13.3.6 受保护系统的上下文切换13.3.7 mpuSLOS13.4 总结第14章 存储管理单元14.1 从MPU到MMU14.2 虚存如何工作14.2.1 使用页定义区域14.2.2 多任务和MMU14.2.3 虚存系统的存储器组织14.3 ARM MMU的详情14.4 页表14.4.1 一级页表项14.4.2 L1转换表基地址14.4.3 二级页表项14.4.4 为嵌入式系统选择合适的页大小14.5 转换旁路缓冲器14.5.1 单步页表搜索14.5.2 2步页表搜索14.5.3 TLB操作14.5.4 TLB锁定14.6 域和存储器访问权限14.7 cache和写缓冲器14.8 协处理器CP15和MMU配置14.9 快速上下文切换扩展14.9.1 FCSE如何使用页表和域14.9.2 使用FCSE的提示14.10 示例:一个简单的虚拟存储系统14.10.1 第1步:定义固定的系统软件区域14.10.2 第2步:为每个任务定义虚存映射14.10.3 第3步:在物理存储器中定位区域14.10.4 第4步:定义和定位页表14.10.5 第5步:定义页表和区域数据结构14.10.6 第6步:初始化MMU、Cache和写缓冲器14.10.7 第7步:建立上下文切换程序14.11 MMUSLOS示例14.12 总结第15章 ARM体系结构的发展15.1 ARMv6对高级DSP和SIMD的支持15.1.1 SIMD算法操作15.1.2 打包指令15.1.3 复数运算支持15.1.4 饱和指令15.1.5 绝对差值求和指令15.1.6 双16位乘法指令15.1.7 高位字乘法15.1.8 密码算法乘法扩展15.2 ARMv6增加的系统和多处理器支持15.2.1 混合大小端支持15.2.2 异常处理15.2.3 多处理同步原语(Multiprocessing Synchronization Primitives)15.3 ARMv6的实现15.4 ARMv6之后的未来技术15.4.1 TrustZone15.4.2 Thumb-215.5 总结附录A ARM和Thumb汇编指令A.1 如何使用这篇附录A.2 语法A.2.1 可选表达式A.2.2 寄存器A.2.3 立即数 A.2.4 条件和标志A.2.5 移位操作A.3 按字母顺序列出ARM和Thumb指令A.4 ARM汇编速查A.4.1 ARM汇编变量A.4.2 ARM汇编标注A.4.3 ARM汇编表达式A.4.4 ARM汇编保留字A.5 GNU汇编快速查询附录 BARM和Thumb指令编码B.1 ARM指令集编码B.2 Thumb指令集编码B.3 程序状态寄存器附录C 处理器与体系结构C.1 ARM命名规则C.2 内核与体系结构附录D 指令周期定时D.1指令周期定时表的使用D.2 ARM7TDMI指令周期定时D.3 ARM9TDMI指令周期定时D.4 StrongARM1 指令周期定时D.5 ARM9E指令周期定时D.6 ARM10E指令周期定时D.7 Intel XScale指令周期定时D.8 ARM11指令周期定时附录E 建议的参考读物E.1 ARM参考E.2 算法参考E.3 存储器管理与cache体系结构(硬件综述与参考)E.4 操作系统参考
作者简介
Andrew N.Sloss于1992年获得Herefordshire大学(英国)计算机科学学士学位,英国计算机协会认证注册工程师(C.Eng,MBCS)。他已在计算机行业工作了16年,从1987年开始参与有关ARM处理器的研发,在ARM处理器上开发了众多领域的应用项目,积累了丰富的经验。他为Emerald出版集团(英国)设计了首个能够在ARM2和ARM3处理器上运行的针对中文和埃及象形文字的编辑系统。他在ARM公司工作了6个多,目前是ARM在美国加州Los Gatos的技术销售工程师,负责为开发新产品的公司提供建议和支持。
目录
第1章 基于ARM的嵌入式系统
1.1 RISC设计思想
1.2 ARM设计思想
1.3 嵌入式系统的硬件
1.3.1 ARM总线技术
1.3.2 AMBA总线协议
1.3.3 存储器
1.3.4 外设
1.4 嵌入式系统的软件
1.4.1 初始化(启动)代码
1.4.2 操作系统
1.4.3 应用程序
1.5 总结
第2章 ARM处理器基础
2.1 寄存器
2.2 当前程序状态寄存器
2.2.1 处理器模式
2.2.2 分组寄存器
2.2.3 状态和指令集
2.2.4 中断屏蔽
2.2.5 条件标志
2.2.6 条件执行
2.3 流水线
2.4 异常、中断及向量表
2.5 内核扩展
2.5.1 cache和紧耦合存储器
2.5.2 存储管理
2.5.3 协处理器
2.6 体系结构的不同版本
2.6.1 命名规则
2.6.2 体系结构的发展
2.7 ARM处理器系列
2.7.1 ARM7系列
2.7.2 ARM9系列
2.7.3 ARM10系列
2.7.4 ARM11系列
2.7.5 专用处理器
2.8 总结
第3章 ARM指令集
3.1 数据处理指令
3.1.1 MOVE指令
3.1.2 桶形移位器
3.1.3 算术指令
3.1.4 算术指令使用桶形移位器
3.1.5 逻辑指令
3.1.6 比较指令
3.1.7 乘法指令
3.2 分支指令
3.3 loadstore指令
3.3.1 单寄存器传送指令
3.3.2 单寄存器loadstore指令的寻址方式
3.3.3 多寄存器传送指令
3.3.4 交换指令
3.4 软件中断指令
3.5 程序状态寄存器指令
3.5.1 协处理器指令
3.5.2 协处理器15(CP15)指令语法
3.6 常量的装载
3.7 ARMv5E扩展
3.7.1 零计数指令
3.7.2 饱和算术指令
3.7.3 ARMv5E乘法指令
3.8 条件执行
3.9 总结
第4章 Thumb指令集
4.1 Thumb寄存器的使用
4.2 ARM-Thumb交互
4.3 其它分支指令
4.4 数据处理指令
4.5 单寄存器load-store指令
4.6 多寄存器load-store指令
4.7 堆栈指令
4.8 软件中断指令
4.9 总结
第5章 高效的C编程
5.1 C编译器及其优化概述
5.2 基本的C数据类型
5.2.1 局部变量类型
5.2.2 函数参数类型
5.2.3 有符号数与无符号数
5.3 C循环结构
5.3.1 固定次数的循环
5.3.2 不定次数的循环
5.3.3 循环展开
5.4 寄存器分配
5.5 函数调用
5.6 指针别名
5.7 结构体安排
5.8 位域
5.9 边界不对齐数据和字节排列方式(大/小端)
5.10 除法
5.10.1 带余数的无符号重复除法
5.10.2 把除转换为乘
5.10.3 除数是常数的无符号除法
5.10.4 除数是常数的有符号除法
5.11 浮点运算
5.12 内联函数和内嵌汇编
5.13 移植问题
5.14 总结
第6章 ARM汇编与优化
6.1 编写汇编代码
6.2 性能分析和周期计数
6.3 指令调整
6.4 寄存器分配
6.4.1 分配变量给寄存器
6.4.2 使用超过14个的局部变量
6.4.3 最大限度地使用寄存器
6.5 条件执行
6.6 循环结构
6.6.1 减计数循环
6.6.2 展开计数循环
6.6.3 多层嵌套循环
6.6.4 其它计数循环
6.7 位操作
6.7.1 固定宽度的位域打包和解包
6.7.2 可变宽度编码的位流打包
6.7.3 可变宽度编码的位流解包
6.8 高效的switch
6.8.1 在范围0≤x 6.8.2 基于通用变量x的switch
6.9 边界不对齐数据的处理
6.10 总结
第7章 基本运算优化
7.1 双精度整数乘法
7.1.1 长整型乘法
7.1.2 128位结果的无符号64位乘法
7.1.3 128位结果的有符号64位整数乘法
7.2 整数规格化和前导0计数
7.2.1 ARMv5及以上体系结构的整数规格化
7.2.2 在ARMv4体系结构上的规格化
7.2.3 后缀0计数
7.3 除法
7.3.1 通过试探减法实现无符号数除法
7.3.2 无符号整数的NewtonRaphson除法
7.3.3 无符号小数NewtonRaphson除法
7.3.4 有符号数除法
7.4 平方根
7.4.1 通过试探减法计算平方根
7.4.2 使用NewtonRaphson迭代计算平方根
7.5 超越函数:log,exp,sin,cos
7.5.1 以2为底的对数运算
7.5.2 2的乘幂
7.5.3 三角函数
7.6 字节顺序反转和位操作
7.6.1 字节顺序反转
7.6.2 位变换
7.6.3‘1’位计数
7.7 饱和及舍入运算
7.7.1 饱和32位数到16位
7.7.2 饱和左移
7.7.3 舍入右移
7.7.4 饱和的32位加减法
7.7.5 饱和绝对值
7.8 随机数产生
7.9 总结
第8章 数字信号处理
8.1 表示一个数字信号
8.1.1 选择一种表示方法
8.1.2 操作以定点格式存储的值
8.1.3 定点信号的加法和减法
8.1.4 定点信号的乘法
8.1.5 定点信号的除法
8.1.6 定点信号的平方根
8.1.7 小结:数字信号的表示
8.2 基于ARM的DSP介绍
8.2.1 ARM7TDMI的DSP
8.2.2 ARM9TDMI的DSP
8.2.3 StrongARM的DSP
8.2.4 ARM9E的DSP
8.2.5 ARM10E的DSP
8.2.6 Intel Xscale的DSP
8.3 FIR滤波器
8.4 IIR滤波
8.5 离散傅里叶变换
8.6 总结
第9章 异常和中断处理
9.1 异常处理
9.1.1 ARM处理器模式及异常
9.1.2 向量表
9.1.3 异常优先级
9.1.4 链接寄存器偏移
9.2 中断
9.2.1 分配中断
9.2.2 中断延迟
9.2.3 IRQ与FIQ异常
9.2.4 基本的中断堆栈设计与实现
9.3 中断处理方法
9.3.1 非嵌套中断处理
9.3.2 嵌套中断处理
9.3.3 可重入中断处理
9.3.4 优先级简单中断处理
9.3.5 优先级标准中断处理
9.3.6 优先级直接中断处理
9.3.7 优先级分组中断处理
9.3.8 基于VIC PL190的中断服务例程
9.4 总结
第10章 固件
10.1 固件和引导装载程序
10.1.1 ARM Firmware Suite
10.1.2 Red Hat Redboot
10.2 例子:Sandstone
10.2.1 Sandstone的目录结构
10.2.2 Sandstone的代码结构
10.3 总结
第11章 嵌入式操作系统
11.1 基本模块
11.2 实例:简单小型操作系统SLOS
11.2.1 SLOS目录结构
11.2.2 初始化
11.2.3 存储模型
11.2.4 中断和异常处理
11.2.5 调度程序
11.2.6 上下文切换
11.2.7 设备驱动程序框架
11.3 总结
第12章 高速缓冲存储器cache
12.1 存储层次和cache
12.2 cache结构
12.2.1 cache存储器的基本结构
12.2.2 cache控制器的基本操作
12.2.3 cache与主存的关系
12.2.4 组相联
12.2.5 写缓冲器
12.2.6 cache效率的衡量
12.3 cache策略
12.3.1 写策略——直写法或回写法
12.3.2 cache行替换策略
12.3.3 cache失效时的分配策略
12.4 协处理器15与cache
12.5 清除和清理cache
12.5.1 清除cache
12.5.2 清理cache
12.5.3 清理Dcache
12.5.4 使用路和组索引寻址清理D-cache
12.5.5 使用test-clean命令清理D-cache
12.5.6 在Intel XScale SA110和Intel StrongARM内核中清理D-cache
12.5.7 清理和清除部分cache
12.6 cache锁定
12.6.1 在cache中锁定代码和数据
12.6.2 通过增加路索引来锁定cache
12.6.3 使用锁定位锁定cache
12.6.4 在Intel XScale SA110中锁定cache行
12.7 cache与软件性能
12.8 总结
第13章 存储器保护单元MPU
13.1 受保护的区域
13.1.1 重叠区域
13.1.2 背景区域
13.2 初始化MPU,cache和写缓冲器
13.2.1 定义区域的大小和位置
13.2.2 访问权限
13.2.3 设置区域的cache和写缓冲器属性
13.2.4 使能区域和MPU
13.3 MPU系统示例
13.3.1 系统需求
13.3.2 使用存储器映射分配区域
13.3.3 初始化MPU
13.3.4 初始化和配置区域
13.3.5 完成初始化MPU
13.3.6 受保护系统的上下文切换
13.3.7 mpuSLOS
13.4 总结
第14章 存储管理单元
14.1 从MPU到MMU
14.2 虚存如何工作
14.2.1 使用页定义区域
14.2.2 多任务和MMU
14.2.3 虚存系统的存储器组织
14.3 ARM MMU的详情
14.4 页表
14.4.1 一级页表项
14.4.2 L1转换表基地址
14.4.3 二级页表项
14.4.4 为嵌入式系统选择合适的页大小
14.5 转换旁路缓冲器
14.5.1 单步页表搜索
14.5.2 2步页表搜索
14.5.3 TLB操作
14.5.4 TLB锁定
14.6 域和存储器访问权限
14.7 cache和写缓冲器
14.8 协处理器CP15和MMU配置
14.9 快速上下文切换扩展
14.9.1 FCSE如何使用页表和域
14.9.2 使用FCSE的提示
14.10 示例:一个简单的虚拟存储系统
14.10.1 第1步:定义固定的系统软件区域
14.10.2 第2步:为每个任务定义虚存映射
14.10.3 第3步:在物理存储器中定位区域
14.10.4 第4步:定义和定位页表
14.10.5 第5步:定义页表和区域数据结构
14.10.6 第6步:初始化MMU、Cache和写缓冲器
14.10.7 第7步:建立上下文切换程序
14.11 MMUSLOS示例
14.12 总结
第15章 ARM体系结构的发展
15.1 ARMv6对高级DSP和SIMD的支持
15.1.1 SIMD算法操作
15.1.2 打包指令
15.1.3 复数运算支持
15.1.4 饱和指令
15.1.5 绝对差值求和指令
15.1.6 双16位乘法指令
15.1.7 高位字乘法
15.1.8 密码算法乘法扩展
15.2 ARMv6增加的系统和多处理器支持
15.2.1 混合大小端支持
15.2.2 异常处理
15.2.3 多处理同步原语(Multiprocessing Synchronization Primitives)
15.3 ARMv6的实现
15.4 ARMv6之后的未来技术
15.4.1 TrustZone
15.4.2 Thumb-2
15.5 总结
附录A ARM和Thumb汇编指令
A.1 如何使用这篇附录
A.2 语法
A.2.1 可选表达式
A.2.2 寄存器
A.2.3 立即数
A.2.4 条件和标志
A.2.5 移位操作
A.3 按字母顺序列出ARM和Thumb指令
A.4 ARM汇编速查
A.4.1 ARM汇编变量
A.4.2 ARM汇编标注
A.4.3 ARM汇编表达式
A.4.4 ARM汇编保留字
A.5 GNU汇编快速查询
附录 BARM和Thumb指令编码
B.1 ARM指令集编码
B.2 Thumb指令集编码
B.3 程序状态寄存器
附录C 处理器与体系结构
C.1 ARM命名规则
C.2 内核与体系结构
附录D 指令周期定时
D.1指令周期定时表的使用
D.2 ARM7TDMI指令周期定时
D.3 ARM9TDMI指令周期定时
D.4 StrongARM1 指令周期定时
D.5 ARM9E指令周期定时
D.6 ARM10E指令周期定时
D.7 Intel XScale指令周期定时
D.8 ARM11指令周期定时
附录E 建议的参考读物
E.1 ARM参考
E.2 算法参考
E.3 存储器管理与cache体系结构(硬件综述与参考)
E.4 操作系统参考
1.1 RISC设计思想
1.2 ARM设计思想
1.3 嵌入式系统的硬件
1.3.1 ARM总线技术
1.3.2 AMBA总线协议
1.3.3 存储器
1.3.4 外设
1.4 嵌入式系统的软件
1.4.1 初始化(启动)代码
1.4.2 操作系统
1.4.3 应用程序
1.5 总结
第2章 ARM处理器基础
2.1 寄存器
2.2 当前程序状态寄存器
2.2.1 处理器模式
2.2.2 分组寄存器
2.2.3 状态和指令集
2.2.4 中断屏蔽
2.2.5 条件标志
2.2.6 条件执行
2.3 流水线
2.4 异常、中断及向量表
2.5 内核扩展
2.5.1 cache和紧耦合存储器
2.5.2 存储管理
2.5.3 协处理器
2.6 体系结构的不同版本
2.6.1 命名规则
2.6.2 体系结构的发展
2.7 ARM处理器系列
2.7.1 ARM7系列
2.7.2 ARM9系列
2.7.3 ARM10系列
2.7.4 ARM11系列
2.7.5 专用处理器
2.8 总结
第3章 ARM指令集
3.1 数据处理指令
3.1.1 MOVE指令
3.1.2 桶形移位器
3.1.3 算术指令
3.1.4 算术指令使用桶形移位器
3.1.5 逻辑指令
3.1.6 比较指令
3.1.7 乘法指令
3.2 分支指令
3.3 loadstore指令
3.3.1 单寄存器传送指令
3.3.2 单寄存器loadstore指令的寻址方式
3.3.3 多寄存器传送指令
3.3.4 交换指令
3.4 软件中断指令
3.5 程序状态寄存器指令
3.5.1 协处理器指令
3.5.2 协处理器15(CP15)指令语法
3.6 常量的装载
3.7 ARMv5E扩展
3.7.1 零计数指令
3.7.2 饱和算术指令
3.7.3 ARMv5E乘法指令
3.8 条件执行
3.9 总结
第4章 Thumb指令集
4.1 Thumb寄存器的使用
4.2 ARM-Thumb交互
4.3 其它分支指令
4.4 数据处理指令
4.5 单寄存器load-store指令
4.6 多寄存器load-store指令
4.7 堆栈指令
4.8 软件中断指令
4.9 总结
第5章 高效的C编程
5.1 C编译器及其优化概述
5.2 基本的C数据类型
5.2.1 局部变量类型
5.2.2 函数参数类型
5.2.3 有符号数与无符号数
5.3 C循环结构
5.3.1 固定次数的循环
5.3.2 不定次数的循环
5.3.3 循环展开
5.4 寄存器分配
5.5 函数调用
5.6 指针别名
5.7 结构体安排
5.8 位域
5.9 边界不对齐数据和字节排列方式(大/小端)
5.10 除法
5.10.1 带余数的无符号重复除法
5.10.2 把除转换为乘
5.10.3 除数是常数的无符号除法
5.10.4 除数是常数的有符号除法
5.11 浮点运算
5.12 内联函数和内嵌汇编
5.13 移植问题
5.14 总结
第6章 ARM汇编与优化
6.1 编写汇编代码
6.2 性能分析和周期计数
6.3 指令调整
6.4 寄存器分配
6.4.1 分配变量给寄存器
6.4.2 使用超过14个的局部变量
6.4.3 最大限度地使用寄存器
6.5 条件执行
6.6 循环结构
6.6.1 减计数循环
6.6.2 展开计数循环
6.6.3 多层嵌套循环
6.6.4 其它计数循环
6.7 位操作
6.7.1 固定宽度的位域打包和解包
6.7.2 可变宽度编码的位流打包
6.7.3 可变宽度编码的位流解包
6.8 高效的switch
6.8.1 在范围0≤x
6.9 边界不对齐数据的处理
6.10 总结
第7章 基本运算优化
7.1 双精度整数乘法
7.1.1 长整型乘法
7.1.2 128位结果的无符号64位乘法
7.1.3 128位结果的有符号64位整数乘法
7.2 整数规格化和前导0计数
7.2.1 ARMv5及以上体系结构的整数规格化
7.2.2 在ARMv4体系结构上的规格化
7.2.3 后缀0计数
7.3 除法
7.3.1 通过试探减法实现无符号数除法
7.3.2 无符号整数的NewtonRaphson除法
7.3.3 无符号小数NewtonRaphson除法
7.3.4 有符号数除法
7.4 平方根
7.4.1 通过试探减法计算平方根
7.4.2 使用NewtonRaphson迭代计算平方根
7.5 超越函数:log,exp,sin,cos
7.5.1 以2为底的对数运算
7.5.2 2的乘幂
7.5.3 三角函数
7.6 字节顺序反转和位操作
7.6.1 字节顺序反转
7.6.2 位变换
7.6.3‘1’位计数
7.7 饱和及舍入运算
7.7.1 饱和32位数到16位
7.7.2 饱和左移
7.7.3 舍入右移
7.7.4 饱和的32位加减法
7.7.5 饱和绝对值
7.8 随机数产生
7.9 总结
第8章 数字信号处理
8.1 表示一个数字信号
8.1.1 选择一种表示方法
8.1.2 操作以定点格式存储的值
8.1.3 定点信号的加法和减法
8.1.4 定点信号的乘法
8.1.5 定点信号的除法
8.1.6 定点信号的平方根
8.1.7 小结:数字信号的表示
8.2 基于ARM的DSP介绍
8.2.1 ARM7TDMI的DSP
8.2.2 ARM9TDMI的DSP
8.2.3 StrongARM的DSP
8.2.4 ARM9E的DSP
8.2.5 ARM10E的DSP
8.2.6 Intel Xscale的DSP
8.3 FIR滤波器
8.4 IIR滤波
8.5 离散傅里叶变换
8.6 总结
第9章 异常和中断处理
9.1 异常处理
9.1.1 ARM处理器模式及异常
9.1.2 向量表
9.1.3 异常优先级
9.1.4 链接寄存器偏移
9.2 中断
9.2.1 分配中断
9.2.2 中断延迟
9.2.3 IRQ与FIQ异常
9.2.4 基本的中断堆栈设计与实现
9.3 中断处理方法
9.3.1 非嵌套中断处理
9.3.2 嵌套中断处理
9.3.3 可重入中断处理
9.3.4 优先级简单中断处理
9.3.5 优先级标准中断处理
9.3.6 优先级直接中断处理
9.3.7 优先级分组中断处理
9.3.8 基于VIC PL190的中断服务例程
9.4 总结
第10章 固件
10.1 固件和引导装载程序
10.1.1 ARM Firmware Suite
10.1.2 Red Hat Redboot
10.2 例子:Sandstone
10.2.1 Sandstone的目录结构
10.2.2 Sandstone的代码结构
10.3 总结
第11章 嵌入式操作系统
11.1 基本模块
11.2 实例:简单小型操作系统SLOS
11.2.1 SLOS目录结构
11.2.2 初始化
11.2.3 存储模型
11.2.4 中断和异常处理
11.2.5 调度程序
11.2.6 上下文切换
11.2.7 设备驱动程序框架
11.3 总结
第12章 高速缓冲存储器cache
12.1 存储层次和cache
12.2 cache结构
12.2.1 cache存储器的基本结构
12.2.2 cache控制器的基本操作
12.2.3 cache与主存的关系
12.2.4 组相联
12.2.5 写缓冲器
12.2.6 cache效率的衡量
12.3 cache策略
12.3.1 写策略——直写法或回写法
12.3.2 cache行替换策略
12.3.3 cache失效时的分配策略
12.4 协处理器15与cache
12.5 清除和清理cache
12.5.1 清除cache
12.5.2 清理cache
12.5.3 清理Dcache
12.5.4 使用路和组索引寻址清理D-cache
12.5.5 使用test-clean命令清理D-cache
12.5.6 在Intel XScale SA110和Intel StrongARM内核中清理D-cache
12.5.7 清理和清除部分cache
12.6 cache锁定
12.6.1 在cache中锁定代码和数据
12.6.2 通过增加路索引来锁定cache
12.6.3 使用锁定位锁定cache
12.6.4 在Intel XScale SA110中锁定cache行
12.7 cache与软件性能
12.8 总结
第13章 存储器保护单元MPU
13.1 受保护的区域
13.1.1 重叠区域
13.1.2 背景区域
13.2 初始化MPU,cache和写缓冲器
13.2.1 定义区域的大小和位置
13.2.2 访问权限
13.2.3 设置区域的cache和写缓冲器属性
13.2.4 使能区域和MPU
13.3 MPU系统示例
13.3.1 系统需求
13.3.2 使用存储器映射分配区域
13.3.3 初始化MPU
13.3.4 初始化和配置区域
13.3.5 完成初始化MPU
13.3.6 受保护系统的上下文切换
13.3.7 mpuSLOS
13.4 总结
第14章 存储管理单元
14.1 从MPU到MMU
14.2 虚存如何工作
14.2.1 使用页定义区域
14.2.2 多任务和MMU
14.2.3 虚存系统的存储器组织
14.3 ARM MMU的详情
14.4 页表
14.4.1 一级页表项
14.4.2 L1转换表基地址
14.4.3 二级页表项
14.4.4 为嵌入式系统选择合适的页大小
14.5 转换旁路缓冲器
14.5.1 单步页表搜索
14.5.2 2步页表搜索
14.5.3 TLB操作
14.5.4 TLB锁定
14.6 域和存储器访问权限
14.7 cache和写缓冲器
14.8 协处理器CP15和MMU配置
14.9 快速上下文切换扩展
14.9.1 FCSE如何使用页表和域
14.9.2 使用FCSE的提示
14.10 示例:一个简单的虚拟存储系统
14.10.1 第1步:定义固定的系统软件区域
14.10.2 第2步:为每个任务定义虚存映射
14.10.3 第3步:在物理存储器中定位区域
14.10.4 第4步:定义和定位页表
14.10.5 第5步:定义页表和区域数据结构
14.10.6 第6步:初始化MMU、Cache和写缓冲器
14.10.7 第7步:建立上下文切换程序
14.11 MMUSLOS示例
14.12 总结
第15章 ARM体系结构的发展
15.1 ARMv6对高级DSP和SIMD的支持
15.1.1 SIMD算法操作
15.1.2 打包指令
15.1.3 复数运算支持
15.1.4 饱和指令
15.1.5 绝对差值求和指令
15.1.6 双16位乘法指令
15.1.7 高位字乘法
15.1.8 密码算法乘法扩展
15.2 ARMv6增加的系统和多处理器支持
15.2.1 混合大小端支持
15.2.2 异常处理
15.2.3 多处理同步原语(Multiprocessing Synchronization Primitives)
15.3 ARMv6的实现
15.4 ARMv6之后的未来技术
15.4.1 TrustZone
15.4.2 Thumb-2
15.5 总结
附录A ARM和Thumb汇编指令
A.1 如何使用这篇附录
A.2 语法
A.2.1 可选表达式
A.2.2 寄存器
A.2.3 立即数
A.2.4 条件和标志
A.2.5 移位操作
A.3 按字母顺序列出ARM和Thumb指令
A.4 ARM汇编速查
A.4.1 ARM汇编变量
A.4.2 ARM汇编标注
A.4.3 ARM汇编表达式
A.4.4 ARM汇编保留字
A.5 GNU汇编快速查询
附录 BARM和Thumb指令编码
B.1 ARM指令集编码
B.2 Thumb指令集编码
B.3 程序状态寄存器
附录C 处理器与体系结构
C.1 ARM命名规则
C.2 内核与体系结构
附录D 指令周期定时
D.1指令周期定时表的使用
D.2 ARM7TDMI指令周期定时
D.3 ARM9TDMI指令周期定时
D.4 StrongARM1 指令周期定时
D.5 ARM9E指令周期定时
D.6 ARM10E指令周期定时
D.7 Intel XScale指令周期定时
D.8 ARM11指令周期定时
附录E 建议的参考读物
E.1 ARM参考
E.2 算法参考
E.3 存储器管理与cache体系结构(硬件综述与参考)
E.4 操作系统参考
猜您喜欢