第一篇 基础篇 3
第1章 基础知识 3
1.1 嵌入式系统 4
1.1.1 概念 4
1.1.2 构成 5
1.1.3 特点 5
1.1.4 知识结构 7
1.2 项目流程 7
1.2.1 立项阶段 8
1.2.2 需求阶段 8
1.2.3 设计阶段 8
1.2.4 实现阶段 9
1.2.5 测试阶段 9
1.2.6 部署阶段 9
1.3 开发模型 9
1.3.1 瀑布模型 9
1.3.2 原型模型 10
1.3.3 螺旋模型 10
1.4 项目组成 11
1.4.1 系统设计 11
1.4.2 客户需求 11
1.4.3 产品说明 12
1.4.4 进度表 12
1.4.5 设计文档 13
1.4.6 测试文档 13
1.4.7 项目成员 13
1.5 本章小结 14
1.6 课后习题 14
第2章 程序设计 15
2.1 计算机语言 16
2.1.1 汇编语言 16
2.1.2 C语言 16
2.1.3 C++语言 17
2.1.4 其他语言 18
2.2 开发环境 18
2.2.1 Windows环境 18
2.2.2 Linux环境 19
2.2.3 VxWorks环境 19
2.2.4 单片机环境 19
2.2.5 嵌入式系统 20
2.3 软件质量 21
2.3.1 软件质量 21
2.3.2 质量保证 22
2.3.3 CMMI 22
2.3.4 ISO9001 22
2.3.5 UML 23
2.3.6 SDL 24
2.3.7 流程图 25
2.4 编码规范 26
2.4.1 文件组织结构 26
2.4.2 命名规则 27
2.4.3 代码风格 29
2.4.4 版本控制 29
2.5 实践-HelloWorld 30
2.5.1 设计流程 30
2.5.2 实践概述 31
2.5.3 分析要求 31
2.5.4 准备环境 31
2.5.5 流程图 31
2.5.6 编辑源代码 32
2.5.7 编译运行 32
2.6 本章小结 32
2.7 课后习题 32
第二篇 C语言篇 35
第3章 编程基础 35
3.1 程序结构 36
3.1.1 顺序式计算器实例 36
3.1.2 文件组织结构 37
3.1.3 程序基本要素 37
3.1.4 程序流程控制 37
3.2 基本要素 38
3.2.1 字符与词汇 38
3.2.2 编译预处理 38
3.2.3 常量和变量 38
3.2.4 运算符 39
3.2.5 表达式 39
3.2.6 语句 39
3.2.7 函数 39
3.2.8 输入输出 40
3.2.9 书写规则 40
3.3 流程控制 40
3.3.1 顺序结构 40
3.3.2 选择结构 41
3.3.3 循环结构 41
3.4 数据类型 41
3.4.1 整型 41
3.4.2 实型 42
3.4.3 字符型 42
3.5 运算符 43
3.5.1 算术运算符 43
3.5.2 关系运算符 43
3.5.3 逻辑运算符 43
3.5.4 位运算运算符 43
3.5.5 赋值运算符 44
3.5.6 条件运算符 44
3.5.7 逗号运算符 44
3.5.8 指针运算符 44
3.5.9 求字节数运算符 44
3.5.10 特殊运算符 4
3.5.11 运算符的优先级 44
3.5.12 运算符的结合性 45
3.6 表达式 45
3.6.1 算术表达式 45
3.6.2 逻辑与关系表达式 45
3.6.3 位运算表达式 46
3.6.4 自增自减表达式 46
3.6.5 括号 46
3.7 语句 46
3.7.1 表达式语句 46
3.7.2 函数调用语句 47
3.7.3 控制语句 47
3.7.4 复合语句 47
3.7.5 空语句 47
3.7.6 赋值语句 47
3.7.7 输入输出语句 47
3.7.8 转移语句 49
3.8 main函数详解 50
3.8.1 形式 50
3.8.2 类型 50
3.8.3 参数 51
3.8.4 main执行前后 51
3.9 条件判断 52
3.9.1 布尔变量与零值比较 53
3.9.2 整型变量与零值比较 53
3.9.3 浮点变量与零值比较 53
3.9.4 指针变量与零值比较 53
3.10 数据类型转换 54
3.10.1 混合运算 54
3.10.2 隐式转换 54
3.10.3 强制转换 54
3.10.4 函数转换 54
3.10.5 构造转换 54
3.11 技能训练 55
3.11.1 选择式计算器 55
3.11.2 循环式计算器 57
3.11.3 函数式计算器 58
3.11.4 多文件计算器 60
3.12 案例特训 62
3.12.1 类型转换(Ⅰ) 62
3.12.2 类型转换(Ⅱ) 63
3.12.3 进制转换 63
3.12.4 多参main 65
3.12.5 Linux环境移植 68
3.13 本章小结 69
3.14 课后习题 69
第4章 编译运行 71
4.1 编译原理 72
4.1.1 编译阶段 72
4.1.2 预处理器 72
4.1.3 源程序分析 72
4.1.4 符号表 73
4.1.5 编译器 73
4.1.6 链接器 73
4.1.7 程序的形成 73
4.1.8 目标文件 73
4.2 运行系统 75
4.2.1 动态连接 75
4.2.2 加载执行 75
4.3 预处理 78
4.3.1 预处理 78
4.3.2 宏定义 78
4.3.3 无参宏 78
4.3.4 带参宏 79
4.3.5 文件包含 80
4.3.6 条件编译 80
4.3.7 断言assert 81
4.3.8 标准预定义宏 82
4.4 技能训练 83
4.4.1 宏练习 83
4.4.2 条件编译 83
4.4.3 Assert练习 83
4.5 案例特训 83
4.5.1 防止多重包含 83
4.5.2 标准预定义宏 83
4.6 本章小结 84
4.7 课后习题 84
第5章 调试测试 85
5.1 概念 86
5.1.1 调试 86
5.1.2 测试 86
5.1.3 调试与测试的区别 86
5.2 调试 86
5.2.1 调试步骤 86
5.2.2 调试工具 87
5.2.3 调试设置 87
5.2.4 断点设置 87
5.2.5 进程控制 87
5.2.6 条件断点 87
5.2.7 数据断点 88
5.2.8 消息断点 88
5.2.9 变量观察watch 88
5.2.10 内存观察memory 88
5.2.11 汇编观察Disassembly 88
5.2.12 寄存器观察Registers 88
5.2.13 函数调用栈Call Stack 88
5.2.14 多线程调试Threads 88
5.2.15 异常响应Exceptions 89
5.2.16 插桩调试 89
5.2.17 追踪TRACE 89
5.2.18 断言ASSERT 89
5.2.19 验证VERIFY 89
5.2.20 函数返回值 89
5.2.21 诊断信息转储Dump 90
5.3 测试 90
5.3.1 内容 90
5.3.2 分类 90
5.3.3 实施流程 90
5.3.4 测试过程 91
5.3.5 单元测试 91
5.3.6 集成测试 92
5.3.7 确认测试 92
5.3.8 系统测试 92
5.3.9 测试工具 92
5.3.10 测试用例 93
5.3.11 举例 93
5.4 技能训练 94
5.4.1 调试综合实例 94
5.4.2 测试综合实例 94
5.5 本章小结 96
5.6 课后习题 96
第6章 数组 97
6.1 数组 98
6.1.1 概述 98
6.1.2 实例 98
6.1.3 表示 99
6.2 字符数组 99
6.2.1 字符数组 99
6.2.2 字符串 99
6.3 多维数组 100
6.3.1 初始化 100
6.3.2 实例 100
6.4 技能训练 101
6.4.1 数组练习 101
6.4.2 字符串 101
6.4.3 多维数组 101
6.5 案例特训 101
6.5.1 字符串排序 101
6.6 本章小结 102
6.7 课后习题 102
第7章 指针 105
7.1 指针 106
7.1.1 指针 106
7.1.2 变量 106
7.1.3 实例 106
7.1.4 类型含义 107
7.1.5 赋值 107
7.1.6 运算 108
7.1.7 使用 108
7.1.8 参数 109
7.1.9 多级指针 109
7.1.10 字符串指针 109
7.2 指针与数组 109
7.2.1 辨析 109
7.2.2 指针数组与数组指针 109
7.2.3 实例 110
7.3 指针与函数 110
7.3.1 指针函数 110
7.3.2 函数指针 111
7.3.3 辨析 112
7.4 技能训练 112
7.4.1 指针数组与数组指针 112
7.4.2 指针函数与函数指针 112
7.5 案例特训 113
7.5.1 多级指针练习 113
7.6 本章小结 113
7.7 课后习题 113
第8章 函数 115
8.1 函数 116
8.1.1 函数的用途 116
8.1.2 模块 116
8.1.3 函数分类 117
8.1.4 函数定义 117
8.1.5 调用 119
8.1.6 参数 119
8.1.7 函数的值 121
8.1.8 嵌套 121
8.2 作用域 121
8.2.1 全局变量 121
8.2.2 局部变量 122
8.2.3 存储类别 122
8.2.4 内部函数 123
8.2.5 外部函数 123
8.3 参数传递 123
8.3.1 C参数传递机制 123
8.3.2 普通变量参数 124
8.3.3 指针变量参数 124
8.3.4 数组变量参数 124
8.3.5 引用参数传递 124
8.4 库函数 126
8.4.1 C标准库 126
8.4.2 Win32标准库 127
8.4.3 Linux标准库 127
8.5 字符串库函数 127
8.5.1 处理函数 127
8.5.2 strcpy详解 128
8.6 技能训练 129
8.6.1 函数调用 129
8.6.2 参数入栈顺序 129
8.6.3 参数传递单向性 129
8.7 案例特训 129
8.7.1 交换两个数完整版 129
8.7.2 mystrcpy函数实现 129
8.8 本章小结 129
8.9 课后习题 129
第9章 构造 131
9.1 结构 132
9.1.1 特点 132
9.1.2 变量 132
9.1.3 大小 132
9.1.4 使用 132
9.1.5 初始化 132
9.1.6 数组 133
9.1.7 指针 133
9.1.8 函数 133
9.1.9 内存分配 134
9.2 联合 135
9.2.1 概念 135
9.2.2 使用 135
9.3 枚举 137
9.3.1 概念 137
9.3.2 赋值 137
9.4 位域 138
9.4.1 位与字节 138
9.4.2 数值表示 138
9.4.3 位运算 138
9.4.4 位域 141
9.4.5 位域的使用 141
9.5 类型定义 143
9.5.1 typedef 143
9.6 技能训练 143
9.6.1 结构体 143
9.6.2 共用体 143
9.6.3 枚举 143
9.7 案例特训 143
9.7.1 结构 143
9.8 本章小结 144
9.9 课后习题 144
第10章 文件 147
10.1 文件 148
10.1.1 普通文件 148
10.1.2 设备文件 148
10.1.3 ASCII文件 148
10.1.4 二进制文件 148
10.2 文件读写 149
10.2.1 文件指针 149
10.2.2 打开文件 149
10.2.3 关闭文件 150
10.2.4 字符读写 150
10.2.5 字符串读写 151
10.2.6 数据块读写 152
10.2.7 格式化读写 153
10.2.8 随机读写 154
10.2.9 文件检测 156
10.3 技能训练 156
10.3.1 字符串读写 156
10.3.2 文件追加 156
10.3.3 文件数据块 156
10.3.4 格式化读写 156
10.4 案例特训 156
10.4.1 随机读写 156
10.5 本章小结 157
10.6 课后习题 157
第11章 内存管理 159
11.1 内存空间 160
11.1.1 C存储区 160
11.1.2 栈 160
11.1.3 堆 160
11.1.4 全局与静态区 160
11.1.5 常量区 161
11.1.6 代码区 161
11.1.7 C++存储区 161
11.1.8 操作系统内存 161
11.1.9 举例 161
11.2 堆与栈 162
11.2.1 概述 162
11.2.2 申请方式 162
11.2.3 分配方式 163
11.2.4 分配效率 163
11.2.5 空间大小 163
11.2.6 生长方向 163
11.2.7 管理方式 163
11.2.8 存储内容 163
11.2.9 碎片问题 163
11.2.10 总结 164
11.3 存储模型 164
11.3.1 变量属性 164
11.3.2 变量作用域 164
11.3.3 变量链接 164
11.3.4 变量存储期 165
11.3.5 自动变量 165
11.3.6 外部变量 166
11.3.7 静态变量 166
11.3.8 寄存器变量 167
11.3.9 volatile 168
11.4 动态内存 168
11.4.1 静态分配 168
11.4.2 动态分配 168
11.4.3 堆内存 169
11.4.4 野指针 169
11.4.5 malloc/calloc/realloc 170
11.4.6 规则 170
11.4.7 应用 170
11.5 动态内存传递 170
11.5.1 问题 170
11.5.2 操作流程 171
11.5.3 分析 171
11.5.4 解决方案 171
11.6 技能训练 174
11.6.1 变量存储 174
11.6.2 register变量 174
11.7 案例特训 174
11.7.1 动态内存传递 174
11.8 本章小结 174
11.9 课后习题 174
第12章 实践-学生管理系统 175
12.1 项目概述 176
12.2 需求分析 176
12.3 详细设计 176
12.3.1 系统模块图 176
12.3.2 组织结构图 176
12.3.3 执行流程图 177
12.3.4 数据结构 178
12.3.5 全局函数 178
12.4 实验结果 179
第三篇 提高篇 183
第13章 数据结构 183
13.1 数据结构概述 184
13.1.1 数据元素 184
13.1.2 数据结构 184
13.2 线性结构 185
13.2.1 概念 185
13.2.2 特征 185
13.2.3 存储 185
13.2.4 操作 185
13.2.5 线性顺序表实践 186
13.3 链表 188
13.3.1 构造 188
13.3.2 分类 188
13.3.3 遍历 188
13.3.4 插入 188
13.3.5 删除 189
13.3.6 单链表实践 189
13.4 栈 192
13.4.1 定义 192
13.4.2 图解 193
13.4.3 操作 193
13.4.4 实践 193
13.4.5 应用 196
13.5 队列 196
13.5.1 定义 196
13.5.2 图解 196
13.5.3 操作 196
13.5.4 实践 197
13.5.5 应用 200
13.6 二叉树 200
13.6.1 树结构 200
13.6.2 二叉树 201
13.6.3 转换 201
13.6.4 构造 202
13.6.5 遍历 202
13.6.6 线索树 202
13.6.7 实践 202
13.6.8 应用 207
13.7 图结构 207
13.7.1 定义 207
13.7.2 术语 207
13.7.3 存储 208
13.7.4 深先与广先 208
13.7.5 实践 208
13.7.6 应用 213
13.8 实践-图书管理系统 213
13.8.1 背景分析 213
13.8.2 项目概述 214
13.8.3 详细设计 214
13.8.4 调试测试 217
13.8.5 总结 217
13.9 本章小结 217
13.10 课后习题 218
第14章 常用算法 219
14.1 算法概述 220
14.1.1 算法概念 220
14.1.2 算法描述 220
14.1.3 评价标准 220
14.1.4 时间效率 221
14.1.5 空间效率 221
14.2 查找 221
14.2.1 线性查找 221
14.2.2 二叉树查找法 222
14.2.3 哈希查找 222
14.3 排序 226
14.3.1 插入排序 226
14.3.2 交换排序 227
14.3.3 选择排序 228
14.4 常用算法 228
14.4.1 递归算法 228
14.4.2 贪婪法 229
14.4.3 分治法 229
14.4.4 穷举法 229
14.5 算法实践 229
14.5.1 递归实践-八皇后问题 229
14.5.2 贪婪法实践-换零钱 232
14.5.3 分治实践-象棋比赛 234
14.5.4 穷举法实践-打印质数 236
14.6 实践-循环冗余校验CRC实现 238
14.6.1 项目概述 238
14.6.2 详细设计 239
14.6.3 运行结果 239
14.6.4 总结 240
14.7 本章小结 240
14.8 课后习题 240
第四篇 C++篇 243
第15章 C++基础 243
15.1 程序结构 244
15.1.1 Hello_world 244
15.1.2 程序结构 244
15.1.3 面向对象 244
15.2 面向对象 245
15.2.1 类 245
15.2.2 属性 246
15.2.3 方法 246
15.2.4 封装 246
15.2.5 继承 247
15.2.6 多态 250
15.2.7 对象 251
15.2.8 构造函数 252
15.2.9 析构函数 253
15.2.10 内联函数 253
15.2.11 静态成员 254
15.2.12 重载 255
15.2.13 重写 257
15.2.14 引用 257
15.2.15 内存管理 258
15.2.16 异常处理 258
15.2.17 命名空间 259
15.3 技能训练 259
15.3.1 封装 259
15.3.2 重载 260
15.3.3 友元 260
15.3.4 字符串类设计 262
15.4 案例特训 267
15.4.1 需求分析 267
15.4.2 详细设计 267
15.4.3 执行结果 269
15.4.4 总结 269
15.5 本章小结 270
15.6 课后习题 270
第16章 泛型编程 271
16.1 模板 272
16.1.1 函数模板 272
16.1.2 模板函数 273
16.1.3 类模板 273
16.1.4 模板类 275
16.2 泛型编程 275
16.2.1 抽象 275
16.2.2 STL 276
16.3 STL 277
16.3.1 容器 277
16.3.2 算法 278
16.3.3 迭代器 278
16.4 设计模式 279
16.4.1 框架 279
16.4.2 常用模式 279
16.5 技能训练 279
16.5.1 模板 279
16.5.2 List 279
16.5.3 Vector 280
16.5.4 Map 283
16.6 案例特训 283
16.6.1 求素数 283
16.7 本章小结 284
16.8 课后习题 284
第17章 应用开发 285
17.1 概述 286
17.1.1 C++标准库 286
17.1.2 软件开发包SDK 286
17.1.3 应用程序接口API 286
17.2 常用库 287
17.2.1 STL 287
17.2.2 Boost 288
17.2.3 MFC 288
17.2.4 WTL 288
17.2.5 ATL 288
17.2.6 OWL 288
17.2.7 GTK 288
17.2.8 WxWidgets 289
17.2.9 Qt 289
17.2.10 ACE 289
17.3 VC编程基础 289
17.3.1 MFC编程 289
17.3.2 简单类 291
17.3.3 消息机制 291
17.3.4 绘图系统 296
17.3.5 对话框 297
17.3.6 控件 298
17.3.7 高级主题 299
17.3.8 实践-窗口程序 300
17.4 Qt编程基础 300
17.4.1 简介 300
17.4.2 程序库 301
17.4.3 界面 301
17.4.4 信号与槽 302
17.4.5 实践-窗口程序 302
17.5 技能训练 303
17.5.1 以VC实现计算器 303
17.5.2 以Qt实现计算器 303
17.5.3 科学计算器 304
17.6 案例特训 304
17.6.1 VC-STL学生成绩评价系统 304
17.7 小结 305
17.8 课后习题 305
第18章 实践-通信 307
18.1 网络通信 308
18.1.1 背景分析 308
18.1.2 项目概述 308
18.1.3 网络专业知识 308
18.1.4 详细设计 310
18.1.5 调试测试 311
18.2 串口通信 311
18.2.1 背景分析 311
18.2.2 项目概述 311
18.2.3 串口专业知识 312
18.2.4 详细设计 316
18.2.5 调试测试 318
第五篇 综合篇 323
第19章 实践-嵌入式编程 323
19.1 整体设计 324
19.1.1 开发背景 324
19.1.2 整体设计 324
19.1.3 硬件平台 324
19.1.4 交叉环境 324
19.1.5 硬件驱动 324
19.1.6 任务管理 325
19.1.7 面向对象 326
19.2 内存管理 326
19.2.1 数据指针 326
19.2.2 函数指针 326
19.2.3 内存申请 327
19.2.4 关键字const 327
19.2.5 关键字volatile 328
19.2.6 字长与位宽 329
19.2.7 字节对齐 329
19.2.8 字节顺序 332
19.3 人机界面 334
19.3.1 LED 334
19.3.2 按键 334
19.3.3 LCD 334
19.3.4 通信接口 334
19.4 性能优化 334
19.4.1 死循环 334
19.4.2 延时 335
19.4.3 使用宏 335
19.4.4 关键字register 336
19.4.5 内嵌汇编 336
19.4.6 位操作 336
19.4.7 define/typedef 337
19.5 实践-LED驱动系统 337
19.5.1 需求分析 337
19.5.2 详细设计 338
19.5.3 编码设计 339
19.5.4 调试与测试 340
19.5.5 部署 341
19.6 本章小结 341
19.7 课后习题 341
第20章 通信协议管理机实现 343
20.1 需求阶段 344
20.1.1 拓 扑结构 344
20.1.2 节点组件图 344
20.1.3 用例图 345
20.2 设计阶段 346
20.2.1 控制协议 346
20.2.2 分层结构 346
20.2.3 帧结构 346
20.2.4 传输过程 347
20.2.5 数据结构 349
20.2.6 关键函数 349
20.3 实现阶段 350
20.3.1 Windows环境 350
20.3.2 Linux环境 351
20.3.3 嵌入式移植 352
20.3.4 远程控制 353
20.4 测试阶段 353
20.5 部署阶段 353
20.6 本章小结 353
20.7 课后习题 353