《汽车嵌入式系统C编程》PDF下载

  • 购买积分:9 如何计算积分?
  • 作  者:和卫民,姜亦学编著
  • 出 版 社:长春:吉林大学出版社
  • 出版年份:2012
  • ISBN:9787560193663
  • 页数:196 页
图书介绍:本书以汽车嵌入式系统软件设计为背景,介绍嵌入式C语言的编程,主要内容包括嵌入式系统的介绍、嵌入式软件开发过程必须遵守的基本原则、嵌入式硬件环境的一般结构和工作方式、源代码的编译、链接及定位过程、嵌入式实时操作系统的基本概念、嵌入式C语言重点难点介绍,以及嵌入式软件编程过程中提高软件安全可靠性、代码运行效率和可移植性的编程技巧。

1 嵌入式系统介绍 1

1.1 嵌入式系统的定义 1

1.2 嵌入式系统的历史和未来 2

1.3 理解嵌入式实时系统(real-time system) 2

1.4 嵌入式软件的作用和影响 3

1.5 嵌入式系统的设计要求 3

1.6 分布式嵌入式系统开发过程 5

2 嵌入式软件开发原则方法 8

2.1 嵌入式系统开发过程描述 8

2.2 软件需求分析阶段 9

2.2.1 软件需求的特点和目的 9

2.2.2 软件需求跟踪和管理 9

2.3 软件架构设计阶段 10

2.3.1 软件架构设计的内容 10

2.3.2 软件架构设计的目标 11

2.4 组件设计阶段 12

2.5 组件编码阶段 12

2.6 单元测试阶段 13

2.7 集成测试阶段 14

2.8 软件接收测试阶段 15

3 初识嵌入式系统软件 16

3.1 第一个嵌入式软件 16

3.2 超级循环与世界末日 18

4 了解嵌入式目标机环境 21

4.1 嵌入式目标机环境的一般结构 21

4.2 嵌入式微处理器 22

4.3 硬件资源的编址 23

4.4 嵌入式系统存储器 24

4.4.1 存储器分类 24

4.4.2 存储器的存储和访问 25

4.4.3 运行时存储器空间结构 26

4.5 晶振电路——心脏起搏器 26

4.6 IO设备控制方式 28

4.6.1 无条件传送控制方式 29

4.6.2 程序查询传送控制方式 29

4.6.3 中断控制方式 30

4.7 I/O端口读写方法 33

4.8 嵌入式系统的初始化 35

5 编译、链接、定位和调试 37

5.1 了解编译器的结构 37

5.2 编译(Compile)、链接(Link)和定位(Locate) 38

5.2.1 编译器一般工作过程(Build Process) 38

5.2.2 编译(Compile) 40

5.2.3 链接(Link) 41

5.2.4 定位(Locate) 42

5.3 下载和调试方法 44

5.3.1 使用烧写器(Memory Chip Programmer) 44

5.3.2 远程调试器(remote-debuger) 46

5.3.3 仿真开发和调试 47

6 操作系统基本概念 49

6.1 实时的概念 49

6.2 代码的临界段 49

6.3 共享资源 49

6.4 多任务 50

6.5 任务切换(context switch) 50

6.6 内核 50

6.7 调度 51

6.8 不可剥夺型内核(Non-Preemptive Kernel) 51

6.9 可剥夺型内核 51

6.10 可重入函数 52

6.11 任务优先级 53

6.12 互斥条件的实现 53

6.12.1 关中断和开中断 53

6.12.2 测试置位操作 54

6.12.3 禁止任务切换 54

6.12.4 信号量(semaphores) 54

6.13 了解中断 55

6.13.1 中断延迟 55

6.13.2 中断响应 55

6.13.3 中断恢复 55

6.13.4 中断处理时间 56

6.14 嵌入式实时OS存储器需求 56

6.15 嵌入式实时OS优缺点 57

6.16 实现简单的嵌入式操作系统 57

7 透彻理解嵌入式C 63

7.1 理解编程语言的作用 63

7.2 为何选择C语言 64

7.3 从“0”开始学习C语言 64

7.4 基于最小软件模块(函数)的开发 65

7.5 高度灵活的语言 69

7.6 C语言标点符号 70

7.7 优先级控制 71

7.8 代码注释 72

7.9 声明和定义 74

7.10 标识符命名 75

7.11 数据存储和表示 77

7.11.1 二进制表示法 77

7.11.2 无符号整数 78

7.11.3 有符号整数 79

7.11.4 字符和字符串 80

7.12 理解字节序和比特序概念 81

7.13 关于布尔量的处理 83

7.14 变量和常量 84

7.14.1 常量(const) 84

7.14.2 静态变量(statics) 84

7.14.3 注意变量的易失性(volatile) 85

7.14.4 自动变量(Automatics) 87

7.14.5 理解自动变量本质 87

7.14.6 外部声明(extern) 89

7.14.7 变量声明和定义 90

7.14.8 变量和常量的初始化 90

7.15 指针 91

7.15.1 地址和指针 92

7.15.2 指针长度 92

7.15.3 使用指针读存储器地址 93

7.16 数组和字符串 93

7.16.1 数组下标 93

7.16.2 数组定义 94

7.16.3 数组和指针操作 94

7.16.4 数组负值下标 95

7.16.5 地址运算 95

7.16.6 字符串库函数 95

7.16.7 数组应用——实现队列 95

7.17 枚举(enum) 98

7.18 结构体 99

7.18.1 结构体定义方法 99

7.18.2 结构体成员访问 100

7.18.3 结构体的初始化 101

7.18.4 使用指针来访问结构体 102

7.18.5 结构体函数参数 103

7.19 联合体(union) 105

7.19.1 联合体的定义 105

7.19.2 联合体应用举例——机器序识别 106

7.19.3 联合体应用举例——通讯协议相关应用 107

7.19.4 联合体应用举例——模块间共享数据 107

7.20 函数及模块化 109

7.20.1 函数操作和宏定义操作 110

7.20.2 函数声明 111

7.20.3 函数定义 112

7.20.4 函数指针 113

7.20.5 函数调用 114

7.20.6 参数传递 115

7.20.7 公共函数和私有函数 116

7.20.8 模块化开发中API的管理和调用 116

7.21 if和switch 123

7.22 switch应用-多状态系统实现 124

7.23 预编译命令 128

7.23.1 宏定义的作用 128

7.23.2 条件编译 129

7.23.3 头文件包含处理 132

7.23.4 预定义宏 132

7.23.5 其他预定义指令 133

7.24 难点提示 134

7.24.1 整数、数组和指针 134

7.24.2 关键字static 135

7.24.3 关键字const 136

8 安全性和可靠性 138

8.1 正确看待MISRA C编程规范 139

8.2 使用看门狗(watchdog)改善嵌入式系统的可靠性 142

8.2.1 看门狗的工作原理 142

8.2.2 看门狗的软件控制 142

8.2.3 看门狗的局限性及应对措施 143

8.3 数据和函数安全保护 144

8.3.1 数据和函数的本地化 144

8.3.2 “只读化”数据和函数参数 145

8.3.3 数据校验及一致性检查 146

8.4 了解目标机及开发工具 149

8.5 重视编译器警告 149

8.6 数据运算的上溢和下溢 150

8.6.1 数据溢出的检测 151

8.6.2 数据溢出的过程 151

8.6.3 数据溢出的纠正和避免 153

8.7 共享资源的保护 157

8.8 断言(Assertion) 158

8.9 软件故障诊断及调试错误定位 160

8.9.1 软件故障诊断 160

8.9.2 软件错误定位(软件调试支持) 161

9 执行效率和资源消耗 163

9.1 深刻了解堆栈(the stack) 163

9.1.1 栈的定义 163

9.1.2 栈的功能 163

9.1.3 栈的使用 164

9.1.4 栈的测试 165

9.2 关键性能指标优化 165

9.2.1 ROM优化 166

9.2.2 RAM优化 166

9.2.3 运行时间优化 166

9.3 选择适合的算法和数据结构 167

9.4 选择合适的数据类型 169

9.5 降低CPU的运算强度 170

9.5.1 选择能生成高质量代码的写法 170

9.5.2 求余运算的优化 170

9.5.3 平方运算的优化 171

9.5.4 使用移位来实现乘除法运算 171

9.5.5 循环的优化 171

9.5.6 使用查表代替复杂运算 172

10 可移植性和可维护性 173

10.1 组件封装和可配置 173

10.1.1 基本类型封装 174

10.1.2 数据范围定义 174

10.1.3 特殊数据类型定义 175

10.1.4 组件接口封装 176

10.1.5 组件配置文件 177

10.1.6 CPU字节序调整 179

10.1.7 定点数据类型优化 184

10.1.8 存储器分配宏定义 189

10.2 组件源文件组织 189

10.3 组件Debug版本和Release版本 192

10.4 屏蔽硬件的异构 193

10.5 选择分支结构的优化 194

参考文献 196