当前位置:首页 > 工业技术
嵌入式软件设计之思想与方法
嵌入式软件设计之思想与方法

嵌入式软件设计之思想与方法PDF电子书下载

工业技术

  • 电子书积分:11 积分如何计算积分?
  • 作 者:张邦术编著
  • 出 版 社:北京:北京航空航天大学出版社
  • 出版年份:2009
  • ISBN:9787811244205
  • 页数:273 页
图书介绍:本书通过对嵌入式系统的分解,重点讲述嵌入式系统软件的层次结构。通过对目前多个主流系统(VxWorks, Linux, WinCE)的内核进行深入浅出地剖析与对比,帮助读者建立起正确的驱动设计模型;通过对不同硬件平台(MIPS,ARM)所开发的板级支持包(BSP)的深入讨论,帮助读者掌握硬件适配层(OAL)设计的核心概念。让读者清楚理解系统环境的上下文,前因后果,从而更好地把握各个软件模块设计的分界与接口,把握设计的对象与目标,在设计中做到心中有数,目标明确,从而更好更快地解决问题。
《嵌入式软件设计之思想与方法》目录

第一篇 基础方法篇 3

第1章 程序基础 3

1.1 设计高性能程序的必要性 3

1.1.1 设计高性能程序的必要性 3

1.1.2 嵌入式软件的设计范畴 3

1.1.3 嵌入式软件的分层结构 6

1.2 嵌入式软件的程序设计要求 8

1.2.1 代码结果的要求 9

1.2.2 代码形式的要求 10

1.3 嵌入式软件开发的基本思路和原则 10

1.3.1 系统分析,定义接口 11

1.3.2 函数实现,优化算法 12

1.3.3 清理代码,补充注释 14

1.3.4 测试修订,完善文档 14

1.4 程序实例剖析 14

1.4.1 正确理解栈 14

1.4.2 内存泄漏 18

1.4.3 消除编译依赖 18

1.4.4 消除潜在隐患 20

1.4.5 规范实现范例 21

1.4.6 性能优化 23

1.5 程序设计其他注意点 30

1.5.1 谨慎使用“宏” 30

1.5.2 正确理解预定义宏 34

1.5.3 避免歧义 37

第2章 多任务操作系统 40

2.1 板级支持包 40

2.2 嵌入式操作系统与实时性 40

2.2.1 嵌入式操作系统 41

2.2.2 实时操作系统 42

2.3 多任务概述 42

2.3.1 进程、线程与任务 43

2.3.2 何时需要多任务 44

2.3.3 任务状态的转换 50

2.3.4 进程调度与调试算法 51

2.3.5 任务相关的API 51

2.4 进程间共享代码与可重入性 53

2.4.1 共享代码 53

2.4.2 共享代码可重入性问题 53

2.4.3 使用私有数据 55

2.4.4 使用临界区数据 57

2.5 线程间通信 57

2.5.1 共享数据结构 57

2.5.2 互斥 59

2.5.3 信号量 60

2.5.4 临界区与信号量的实现实例 63

第3章 硬件基础 74

3.1 ARM 74

3.1.1 ARM编程模式 75

3.1.2 ARM指令概述 78

3.1.3 ARM异常及处理 80

3.2 MIPS 86

3.2.1 MIPS编程模式 87

3.2.2 MIPS指令概述 90

3.2.3 MIPS中断与异常 95

3.3 接口基础 98

3.3.1 总线概述 99

3.3.2 I2C总线 105

3.3.3 PCI总线 108

3.3.4 设备模型 115

3.3.5 一个IDE控制器设备实例 117

第二篇 驱动模型篇 121

第4章 驱动的通用模型 121

4.1 设备驱动的作用 121

4.2 驱动类型 123

4.2.1 Lirux中的驱动类型 123

4.2.2 WinCE中的驱动类型 125

4.2.3 VxWorks中的驱动类型 125

4.3 设备驱动的通用模型 126

4.3.1 模块部分的驱动 126

4.3.2 设备的驱动例程 127

第5章 VxWorks的驱动模型 131

5.1 VxWorks的I/O系统 131

5.1.1 I/O系统概述 131

5.1.2 文件名与设备 133

5.1.3 基本I/O 134

5.1.4 缓冲I/O 136

5.1.5 格式化I/O 136

5.2 VxWorks的驱动及其内部结构 137

5.2.1 驱动的安装、驱动表 138

5.2.2 设备的创建、设备链表 140

5.2.3 文件的打开、文件描述符表 142

5.2.4 文件的读、写、控制和关闭操作 143

第6章 Linux的驱动模型 145

6.1 Linux的驱动加载方式 145

6.1.1 内核驱动模块与模块化驱动 145

6.1.2 模块化驱动的加载与卸载 146

6.2 Linux的驱动架构 147

6.2.1 一个最简单的内核驱动 148

6.2.2 一个最简单的模块驱动 151

6.2.3 Linux驱动中注册驱动 153

6.2.4 Linux系统中的设备文件 154

6.3 Linux字符型设备驱动 155

6.3.1 驱动的加载与清理 155

6.3.2 中断的申请与释放 156

第7章 WinCE的驱动模型 158

7.1 WinCE驱动类型 158

7.2 设备管理器及其驱动模型 159

第三篇 BSP/OAL篇 161

第8章 BSP的基本概念 161

8.1 BSP与驱动 161

8.2 BSP开发的目标任务 162

第9章 BSP的设计要素 163

9.1 中断处理 163

9.1.1 物理中断号与逻辑中断号 163

9.1.2 CPU中断与中断控制器扩展 164

9.1.3 中断源的查找 165

9.1.4 中断处理线程 166

9.2 CPU异常 166

9.2.1 异常向量表 167

9.2.2 向量表的安装 173

9.2.3 异常处理代码实例 177

9.3 硬件I/O的访问 188

9.3.1 避免使用绝对物理地址 188

9.3.2 内存一致性问题 192

9.3.3 I/O访问的刷新 198

第10章 Linux的启动过程 199

10.1 Linux的启动流程 199

10.2 Linux的启动过程简介 201

10.2.1 _stext函数 201

10.2.2 start_kernel函数 203

10.2.3 setup_arch函数 204

10.2.4 trap_init函数 204

10.2.5 init_IRQ函数 205

10.2.6 sched_init函数 205

10.2.7 do_initcalls函数 205

10.2.8 init函数 206

10.2.9 init程序 207

第11章 WinCE的设计 209

11.1 WinCE OS平台开发简介 209

11.1.1 WinCE平台的开发流程 209

11.1.2 WinCE内核结构 211

11.1.3 WinCE设计中的一些名词术语 212

11.2 WinCE BSP开发 213

11.2.1 启动装载器 213

11.2.2 OAL开发 215

11.2.3 WinCE配置文件 219

11.3 WinCE设备驱动的开发流程 221

11.3.1 设备驱动源代码 221

11.3.2 修改配置文件 222

11.3.3 向OS平台注入驱动 223

第四篇 扩展篇 226

第12章 理解程序的内部结构 226

12.1 x86汇编及其程序结构 226

12.1.1 x86程序段定义 227

12.1.2 关联段寄存器、确定段的种类 230

12.1.3 段组伪指令 230

12.2 嵌入式系统中的程序结构 231

12.2.1 嵌入式系统中执行程序的映像 231

12.2.2 链接器与命令脚本 236

12.3 ELF文件格式 241

12.3.1 ELF文件格式概述 241

12.3.2 ELF文件格式分析器 248

第13章 嵌入式系统的设计思想 262

13.1 直截了当的思想 262

13.2 层次化的思想 267

13.3 循序渐进的思想 269

13.4 实践是最好的老师 269

13.5 团队协作意识 270

13.6 大胆尝试与积极创新 270

结束语 272

参考文献 273

图1-1 嵌入式软件的分层结构 7

图2-1 VxWorks中的任务状态转换图 50

图2-2 驱动中的可重入性问题1 54

图2-3 驱动中的可重入性问题2 56

图2-4 使用共享数据区访问临界区的例子 58

图3-1 ARM程序状态寄存器格式 77

图3-2 MIPS CPU寄存器 88

图3-3 MIPS FPU寄存器 90

图3-4 I2C数据位的传输 106

图3-5 I2C起始条件和停止条件 106

图3-6 I2C总线数据传输时序图 107

图3-7 PCI CONFIG-ADDRESS寄存器格式 113

图3-8 PCI类型0配置空间头部 114

图3-9 ITE8172 IDE控制器框图 118

图5-1 驱动在系统中的层次结构 132

图5-2 VxWorks I/O系统的调用关系 133

图5-3 VxWorks驱动安装 140

图5-4 VxWorks设备添加 141

图5-5 VxWorks文件打开 142

图5-6 文件读操作的I/O控制流程 143

图6-1 Linux驱动与操作系统核心之间的关系 147

图7-1 WinCE驱动内部框图 158

图7-2 WinCE系统中应用程序与设备驱动的交互 160

图9-1 驱动程序中完整的中断处理架构 164

图9-2 IT8172G中断控制器内部框图 177

图10-1 Linux启动流程框图 200

图10-2 Linux启动执行过程细节 201

图11-1 WinCE OS开发的工作流程 210

图11-2 WinCE的内部层次结构 211

图11-3 WinCE BSP框图 214

图12-1 x86汇编段结构 228

图12-2 宏汇编中的段链接映像 230

图12-3 x86段组定义 231

图12-4 节的简单格式 237

图12-5 节的完整定义 239

图12-6 口(ENTRY)的定义 240

图12-7 ELF目标文件格式 242

表3-1 ARM寄存器组织结构 75

表3-2 ARM状态寄存器的模式位 78

表3-3 ARM异常处理的入口地址 81

表3-4 ARM异常的优先级 86

表3-5 MIPS系统控制寄存器CPO 88

表3-6 MIPS32/MIPS64装入/存储指令所支持的数据类型 91

表3-7 MIPS对齐的装入存储指令 91

表3-8 MIPS非对齐的装入存储指令 91

表3-9 MIPS原子更新的装入存储指令 92

表3-10 协处理器装入存储指令 92

表3-11 MIPS立即数操作的算术指令 92

表3-12 MIPS三操作数算术指令 92

表3-13 MIPS二操作数算术指令 93

表3-14 MIPS移位指令 93

表3-15 MIPS乘除法指令 94

表3-16 MIPS 256M区域内无条件跳转指令 95

表3-17 MIPS PC相对的条件转移指令 95

表3-18 MIPS的中断、状态及缘由寄存器的映射关系 96

表3-19 MIPS异常向量的基地址 97

表3-20 MIPS异常向量的偏移地址 97

表3-21 I2C总线术语定义 105

表3-22 PCI总线命令 110

表3-23 ITE8172 IDE控制器的PCI配置寄存器 119

表3-24 ITE8172 IDE总线主设备IDE输入/输出寄存器 119

表3-25 IDE命令寄存器 120

表11-1 WinCE常见的映像配置文件 219

表12-1 字符串表简单例子 246

表12-2 对字符串表索引所得到的字符串 246

相关图书
作者其它书籍
返回顶部