oracle 嵌入式程序设计,嵌入式软件设计基础:基于ARM Cortex-M3(原书第2版) 带目录完整pdf[43MB]...

本书深入探讨嵌入式系统的多线程编程,以ARMCortex-M3v7处理器为例,讲解汇编语言在实现高效、可靠程序中的应用。内容涵盖数的表示、算术运算、C语言的整数类型、汇编程序设计、并发软件、调度和存储管理,旨在为学习操作系统、实时系统打下坚实基础。
摘要由CSDN通过智能技术生成

本书的最终目标是为支持多线程风格的程序设计和嵌入式软件的高可靠性需求建立坚实的基础。书中以实践中最常运用的方式讲解汇编语言——实现小型、快速或特殊目的的例程,这些例程由主程序(高级语言编写,如C)调用。通过运用嵌入式软件环境,本书介绍多线程程序设计、可抢占式系统与非可抢占式系统、共享资源和调度,帮助学生保持学习兴趣,满足他们的好奇心,并为操作系统、实时系统、计算机网络及基于多处理器的设计等后续课程做好充分准备。前版由高教社引进,新版用最新的ARM Cortex-M3 v7处理器替代了早期的Intel IA32处理器,更加符合目前越来越多的实时嵌入式应用需求。

本书适用于高等院校工科各专业本科嵌入式计算机系统程序设计、C语言程序设计及汇编语言程序设计类课程,也可供相关技术人员学习参考。

目录

出版者的话

译者序

献辞

前言

第1章  导论 1

1.1  什么是嵌入式系统 1

1.2  嵌入式软件设计的目标有什么独特性 3

1.3  什么是实时系统 4

1.4  什么是多线程 4

1.5  嵌入式处理器到底有多强大 4

1.6  如何使用编程语言 5

1.7  构建嵌入式应用有什么不同之处 6

1.8  典型的嵌入式程序有多大 7

习题 7

第2章  数的表示 9

2.1  固定精度二进制数 9

2.2  按位计数制 10

2.2.1  二进制到十进制的转换 11

2.2.2  十进制到二进制的转换 11

2.2.3  十六进制:二进制的简写 13

2.2.4  固定精度、反转与溢出 14

2.3  整数的二进制表示 14

2.3.1  带符号整数 15

2.3.2  同一数量级的正数和负数表示 15

2.3.3  解释2的补码的值 16

2.3.4  改变具有整数和小数部分的数的符号 17

2.3.5  二进制加减法 17

2.3.6  表示范围与溢出 19

2.4  实数的二进制表示 19

2.4.1  浮点表示的实数 19

2.4.2  定点表示的实数 21

2.5  文本的ASCII码表示 22

2.6  二进制编码的十进制 23

习题 24

第3章 实现算术运算 27

3.1  2的补码与硬件复杂度 27

3.2  乘法与除法 29

3.2.1  有符号与无符号乘法 29

3.2.2  通过对2的移位来实现乘或者除 29

3.2.3  乘以任意常量 30

3.2.4  除以任意常量 31

3.3  定点实数的算术运算 31

3.3.1  使用标准16.16格式的定点数 33

3.3.2  使用标准32.32格式的定点数 34

3.3.3  32.32定点实数乘法 34

3.3.4  实例:4.4定点实数乘法 36

习题 37

第4章 C的整数类型及其使用 39

4.1  整数数据类型 39

4.2  布尔数据类型 42

4.3  混合数据类型 43

4.4  内存中的位操作 43

4.4.1  测试位 45

4.4.2  设置、清除与反转位 45

4.4.3  提取位 46

4.4.4  插入位 46

4.5  I/O端口的位操作 47

4.5.1  只写I/O设备 47

4.5.2  基于读和写的I/O设备 48

4.5.3  基于串行访问的I/O设备 49

4.5.4  基于写入数据位的I/O设备 49

4.6  访问内存映射的I/O设备 50

4.6.1  使用指针访问数据 50

4.6.2  数组、指针和取地址操作符 51

4.7  结构体 51

4.7.1  封装的结构体 52

4.7.2  位域 54

4.8  变量访问 54

4.8.1  获取对象的地址 55

4.8.2  使用联合体 56

习题 56

第5章 汇编程序设计Ⅰ:计算机组成 60

5.1  内存 61

5.2  中央处理单元 64

5.2.1  其他寄存器 65

5.2.2  取指–执行周期 65

5.3  输入/输出 67

5.4  ARM Cortex-M3 v7M体系结构概述 67

5.4.1  内部组成 68

5.4.2  指令流水线 69

5.4.3  存储模型 70

5.4.4  位带 71

5.5  ARM汇编语言 72

5.5.1  指令格式与操作数 72

5.5.2  将汇编翻译为二进制 73

习题 74

第6章 汇编程序设计Ⅱ:数据操作 77

6.1  将常量装入寄存器 77

6.2  将内存数据装入寄存器 77

6.3  数据从寄存器存入内存 79

6.4  将简单的C赋值语句转换为ARM汇编代码 80

6.5  内存地址计算 81

6.6  内存寻址实例 81

6.6.1  将C指针表达式翻译为汇编代码 82

6.6.2  将C下标表达式翻译为汇编代码 83

6.6.3  将结构体引用翻译为汇编代码 83

6.7  栈指令 84

6.8  数据处理指令 85

6.8.1  在APSR中更新标识 85

6.8.2  算术运算指令 85

6.8.3  位操作指令 86

6.8.4  移位指令 87

6.8.5  位域操作指令 88

6.8.6  混合位、字节和半字指令 89

习题 90

第7章 汇编程序设计Ⅲ:控制结构 92

7.1  指令序列 92

7.2  实现判定 92

7.2.1  条件分支指令 93

7.2.2  if-then和if-then-else语句 94

7.2.3  复合条件码 95

7.2.4  if-then指令 96

7.3  实现循环 97

7.4  函数的实现 99

7.4.1  函数调用和返回 99

7.4.2  寄存器使用 100

7.4.3  参数传递 101

7.4.4  返回值 101

7.4.5  临时变量 102

7.4.6  保存寄存器值 102

习题 103

第8章 汇编程序设计Ⅳ:I/O编程 106

8.1  Cortex-M3 I/O硬件 106

8.1.1  中断和异常 107

8.1.2  线程和异常处理模式 107

8.1.3  进入异常处理程序 107

8.1.4  从异常处理程序返回 108

8.1.5  减少延迟 108

8.1.6  优先级与嵌套异常 109

8.2  同步、传输率与延迟 111

8.3  缓冲区与队列 111

8.4  评价I/O的执行能力 113

8.4.1  轮询等待循环 114

8.4.2  中断驱动的I/O 116

8.4.3  直接内存访问 117

8.4.4  不同方法的比较 117

习题 118

第9章 并发软件 120

9.1  前台/后台系统 120

9.1.1  线程状态与串行化 120

9.1.2  延迟管理 121

9.1.3  中断溢出 123

9.1.4  将工作转移到后台 123

9.2  多线程编程 124

9.2.1  独立线程的并发执行 124

9.2.2  上下文切换 124

9.2.3  非抢占(合作)多线程 125

9.2.4  抢占式多线程 126

9.3  共享资源与临界区 127

9.3.1  禁止中断 127

9.3.2  禁止任务切换 127

9.3.3  自旋锁 128

9.3.4  互斥对象 128

9.3.5  信号量 129

习题 129

第10章 调度 131

10.1  线程状态 131

10.2  等待中的线程 132

10.3  上下文切换 132

10.4  轮转调度 134

10.5  基于优先级的调度 134

10.5.1  资源饥饿 134

10.5.2  优先级反转 134

10.5.3  优先级上限协议 135

10.5.4  优先级继承协议 135

10.6  分配优先级 136

10.6.1  最后期限驱动的调度 136

10.6.2  速率单调的调度 137

10.7  死锁 137

10.8  看门狗定时器 138

习题 140

第11章 存储管理 142

11.1  C语言中的对象 142

11.2  作用域 143

11.2.1  改进局部作用域 143

11.2.2  改进全局作用域 144

11.3  生命周期 145

11.4  自动分配 145

11.5  静态分配 146

11.6  三个程序:区分静态分配和自动分配 147

11.6.1  对象创建 147

11.6.2  对象初始化 147

11.6.3  对象销毁 148

11.7  动态分配 149

11.7.1  内存碎片 150

11.7.2  内存分配池 150

11.8  具有变量大小的动态分配 150

11.9  递归函数和内存分配 152

习题 152

第12章 共享内存 157

12.1  确定共享对象 157

12.1.1  共享全局数据 157

12.1.2  共享私有数据 157

12.1.3  共享函数 157

12.2  可重入函数 158

12.3  只读数据 158

12.4  编程实践需要避免的事项 159

12.4.1  将内部状态保持在本地静态对象的函数 159

12.4.2  返回本地静态对象地址的函数 161

12.5  访问共享内存 162

12.5.1  处理器体系结构的影响 163

12.5.2  只读和只写访问 164

12.5.3  类型限定符volatile 164

习题 165

第13章 系统初始化 168

13.1  内存层次 168

13.2  CPU和向量表 168

13.3  C运行时环境 170

13.3.1  将初始值从非易失性存储器复制到数据区 170

13.3.2  将未初始化的静态变量归零 170

13.3.3  设置堆 171

13.4  系统定时器 171

13.5  其他外围设备 172

部分习题答案 173

索引 175

ea227f13d638b912de3fa349d9b80164.png

【目  录】: 第1篇系统篇 第1章嵌入式系统概述3 1.1嵌入式系统的定义和特点3 1.1.1嵌入式系统的定义3 1.1.2嵌入式系统和通用计算机比较4 1.1.3嵌入式系统的特点5 1.2嵌入式系统的硬件6 1.2.1嵌入式处理器7 1.2.2嵌入式存储器15 1.2.3嵌入式I/O设备18 1.2.4嵌入式I/O接口18 1.3嵌入式系统的软件21 1.3.1无操作系统的嵌入式软件22 1.3.2操作系统的嵌入式软件24 1.4嵌入式系统的分类27 1.4.1按硬件(嵌入式处理器)划分27 1.4.2按软件复杂度划分27 1.4.3按实时性划分28 1.4.4按使用对象划分28 1.5嵌入式系统的应用28 1.5.1国防军事28 1.5.2工业控制29 1.5.3消费电子30 1.5.4办公自动化产品30 1.5.5网络和通信设备30 1.5.6汽车电子31◆嵌入式系统原理及应用目录1.5.7金融商业31 1.5.8生物医学32 1.5.9信息家电32 1.6本章小结34 习题134 第2章嵌入式系统开发35 2.1嵌入式系统的开发环境、开发工具和调试方式35 2.1.1嵌入式系统的开发环境35 2.1.2嵌入式系统的开发工具37 2.1.3嵌入式系统的调试方式43 2.2嵌入式系统的开发语言50 2.2.1嵌入式硬件开发语言50 2.2.2嵌入式软件开发语言51 2.3嵌入式系统的开发过程53 2.3.1需求分析54 2.3.2系统设计55 2.3.3系统实现61 2.3.4系统测试70 2.3.5系统发布73 2.4嵌入式开发工程师之路74 2.4.1嵌入式行业和人才的现状分析74 2.4.2嵌入式开发工程师的能力要求74 2.4.3嵌入式开发工程师的进阶之路75 2.5本章小结77 习题278 第2篇内核篇 第3章ARM CortexM3处理器81 3.1ARM CortexM3组成结构81 3.1.1CortexM3内核82 3.1.2调试系统84 3.2ARM CortexM3总线接口86 3.2.1CortexM3总线接口类型87 3.2.2CortexM3总线连接方案88 3.3ARM CortexM3编程模型89 3.3.1工作状态89 3.3.2数据类型89 3.3.3寄存器89 3.3.4指令系统93 3.3.5操作模式和特权分级96 3.3.6异常和中断98 3.3.7双堆栈机制105 3.4ARM CortexM3存储器系统107 3.4.1存储器映射107 3.4.2位操作110 3.4.3存储格式112 3.5ARM CortexM3的低功耗模式113 3.6本章小结114 习题3115 第4章基于ARM CortexM3的STM32微控制器117 4.1从CortexM3到基于CortexM3的MCU117 4.2基于CortexM3的STM32系列微控制器概述118 4.2.1产品线118 4.2.2命名规则124 4.2.3生态系统125 4.2.4开发方法131 4.2.5学习之路134 4.3STM32F103微控制器基础136 4.3.1概述136 4.3.2主系统结构137 4.3.3功能模块139 4.3.4引脚定义140 4.3.5存储器组织141 4.4STM32F103微控制器的最小系统145 4.4.1电源电路145 4.4.2时钟电路148 4.4.3复位电路149 4.4.4调试和下载电路150 4.4.5其他151 4.5STM32F103微控制器的时钟系统153 4.5.1输入时钟153 4.5.2系统时钟155 4.5.3由系统时钟分频得到的其他时钟155 4.5.4STM32F10x时钟系统相关库函数157 4.6STM32F103微控制器的低功耗模式162
宋宝华嵌入式 C/C++语言精华文章集锦 C/C+语言 struct 深层探索 ............................................................................2 C++中 extern "C"含义深层探索........................................................................7 C 语言高效编程的几招...............................................................................11 想成为嵌入式程序员应知道的 0x10 个基本问题 .........................................................15 C 语言嵌入式系统编程修炼...........................................................................22 C 语言嵌入式系统编程修炼之一:背景篇 ............................................................22 C 语言嵌入式系统编程修炼之二:软件架构篇 ........................................................24 C 语言嵌入式系统编程修炼之三:内存操作 ..........................................................30 C 语言嵌入式系统编程修炼之四:屏幕操作 ..........................................................36 C 语言嵌入式系统编程修炼之五:键盘操作 ..........................................................43 C 语言嵌入式系统编程修炼之六:性能优化 ..........................................................46 C/C++语言 void 及 void 指针深层探索 .................................................................50 C/C++语言可变参数表深层探索 .......................................................................54 C/C++数组名与指针区别深层探索 .....................................................................60 C/C++程序员应聘常见面试题深入剖析(1) ..............................................................62 C/C++程序员应聘常见面试题深入剖析(2) ..............................................................67 一道著名外企面试题的抽丝剥茧 ......................................................................74 C/C++结构体的一个高级特性――指定成员的位数 .......................................................78 C/C++中的近指令、远指针和巨指针 ...................................................................80 从两道经典试题谈 C/C++中联合体(union)的使用 ......................................................81 基于 ARM嵌入式 Linux 移植真实体验 ................................................................83 基于 ARM嵌入式 Linux 移植真实体验(1)――基本概念 ...........................................83 基于 ARM嵌入式 Linux 移植真实体验(2)――BootLoader .........................................96 基于 ARM嵌入式 Linux 移植真实体验(3)――操作系统 ..........................................111 基于 ARM嵌入式 Linux 移植真实体验(4)――设备驱动 ..........................................120 基于 ARM嵌入式 Linux 移植真实体验(5)――应用实例 ..........................................135 深入浅出 Linux 设备驱动编程 .......................................................................144 1.Linux 内核模块..............................................................................144 2.字符设备驱动程序 ...........................................................................146 3.设备驱动中的并发控制 .......................................................................151 4.设备的阻塞与非阻塞操作 .....................................................................157
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值