第1章 计算机系统 1
1.1 计算机结构简介 1
1.1.1 冯·诺依曼结构 1
1.1.2 哈佛结构 2
1.2 处理器内核 3
1.2.1 指令系统 4
1.2.2 乘法器和除法器 5
1.2.3 程序计数器 6
1.2.4 堆栈 6
1.3 程序存储器 7
1.3.1 直接修改寄存器 7
1.3.2 跳转指令 8
1.3.3 FLASH自编程 9
1.4 数据存储器 12
1.4.1 直接寻址 13
1.4.2 间接寻址 14
1.4.3 通用存储器特殊寻址 16
第2章 C语言基础 17
2.1 命令式语言 17
2.2 程序基本结构 19
2.2.1 注释 20
2.2.2 预处理 20
2.2.3 函数 20
2.2.4 变量 21
2.2.5 表达式与控制结构 21
2.3 C语言标准 22
2.3.1 传统C 22
2.3.2 C89标准 22
2.3.3 C95标准 23
2.3.4 C99标准 23
2.3.5 Clx标准 24
2.3.6 GB标准 25
2.4 语言的语法 25
2.4.1 文法 25
2.4.2 文法推导 27
2.5 本书约定 28
第3章 表达式 29
3.1 变量 29
3.1.1 类型 29
3.1.2 变量声明 33
3.1.3 变量初始化 34
3.2 标识符 35
3.3 常量 36
3.3.1 整数常量 37
3.3.2 浮点数常量 37
3.3.3 字符常量 39
3.3.4 字符串常量 40
3.4 表达式 40
3.4.1 运算符的优先级 41
3.4.2 算术表达式 42
3.4.3 赋值表达式 44
3.4.4 逗号表达式 47
3.4.5 关系表达式 47
3.4.6 判等表达式 48
3.4.7 逻辑表达式 48
3.4.8 条件表达式 49
3.4.9 按位表达式 50
3.4.10 移位表达式 51
3.4.11 增值、减值运算 52
3.4.12 类型转换表达式 53
3.5 sizeof表达式 54
3.6 类型转换:表示形式转换 54
3.6.1 表示形式改变 55
3.6.2 整型之间转换 55
3.6.3 其他标量类型转换为整型 56
3.6.4 转换为浮点类型 56
3.6.5 转换为结构/联合类型 57
3.6.6 转换为枚举类型 57
3.6.7 转换为数组/函数类型 57
3.6.8 转换为指针 57
3.7 类型转换:寻常转换 58
第4章 语句 64
4.1 表达式语句 64
4.2 复合语句 65
4.2.1 作用域 65
4.2.2 见性 67
4.2.3 重复可见性 67
4.3 选择语句 68
4.3.1 if语句 68
4.3.2 switch语句 72
4.4 循环语句 76
4.4.1 while语句 76
4.4.2 do语句 77
4.4.3 for语句 78
4.4.4 程序实例 79
4.5 无条件转移语句 85
4.5.1 break与continue语句 85
4.5.2 goto语句 87
4.6 名字重载 89
第5章 数组 91
5.1 数组概述 91
5.2 一维数组 92
5.2.1 一维数组声明 92
5.2.2 数组下标 93
5.2.3 程序实例 93
5.3 多维数组 96
5.3.1 二维数组声明 97
5.3.2 程序实例 97
5.3.3 多维数组声明 99
5.4 数组初始化 100
5.4.1 一维数组初始化 100
5.4.2 二维数组初始化 100
5.4.3 多维数组初始化 102
5.5 数组存储 102
5.5.1 存储映射 102
5.5.2 选择器 103
5.5.3 边界检查 104
5.6 排序与查找 105
5.6.1 排序 105
5.6.2 查找 109
第6章 结构 113
6.1 结构概述 113
6.1.1 引例 113
6.1.2 结构标签 114
6.1.3 结构初始化 116
6.1.4 结构成员选择 116
6.2 结构存储 117
6.2.1 存储布局 118
6.2.2 内存对齐 118
6.3 结构赋值 121
6.4 程序实例 122
6.5 位域 128
6.5.1 位域概述 128
6.5.2 位域声明 130
6.5.3 位域布局 131
6.5.4 匿名位域 132
6.6 结构声明 134
第7章 联合与枚举 137
7.1 联合 137
7.1.1 联合概述 137
7.1.2 联合存储 140
7.1.3 联合赋值 141
7.1.4 联合应用 142
7.2 枚举 147
7.2.1 枚举声明 148
7.2.2 枚举运算 150
第8章 指针 152
8.1 指针概述 152
8.1.1 指针概念 152
8.1.2 指针声明 153
8.1.3 基本运算 153
8.1.4 通用指针 155
8.2 指针与数组 155
8.2.1 现象与本质 156
8.2.2 指针的算术运算 156
8.2.3 指针的其他运算 158
8.2.4 指针访问数组 161
8.2.5 程序实例 165
8.3 指针与结构 171
8.4 动态存储分配 174
8.4.1 运行时环境 174
8.4.2 动态分配与释放 175
8.4.3 堆区管理 176
8.4.4 悬空指针 178
8.4.5 内存泄漏 179
8.5 字符串 180
8.5.1 字符串存储 181
8.5.2 字符串变量 182
8.5.3 字符串的基本操作 182
第9章 函数 186
9.1 引例 186
9.2 函数定义 188
9.2.1 定义位置 188
9.2.2 基本形式 188
9.2.3 程序实例 189
9.3 参数 193
9.3.1 参数声明 193
9.3.2 参数传递 195
9.3.3 实参求值顺序 197
9.3.4 程序实例 198
9.4 返回值 202
9.4.1 return语句 203
9.4.2 函数返回类型 203
9.5 函数原型 204
9.5.1 函数原型基础 204
9.5.2 函数原型兼容 205
9.5.3 函数原型一致性 205
9.6 函数指针 207
9.6.1 基本形式 207
9.6.2 函数指针的运算 208
第10章 预处理 210
10.1 预处理概述 210
10.1.1 预处理过程 210
10.1.2 预处理命令 211
10.1.3 预处理词法 212
10.2 宏定义与替换 215
10.2.1 类似对象的宏 215
10.2.2 类似函数的宏 216
10.2.3 宏与函数的差异 217
10.2.4 取消宏定义 219
10.2.5 预定义宏 219
10.2.6 重新扫描 221
10.2.7 递归展开 221
10.3 条件编译 222
10.3.1 #if...#endif结构 222
10.3.2 #if...#else...#endif结构 223
10.3.3 #elif命令 224
10.3.4 defined运算符 225
10.3.5 #ifdef、#ifndef命令 225
10.4 文件包含 226
10.4.1 一般形式 226
10.4.2 搜索路径 226
10.4.3 搜索路径设置 227
10.5 特殊命令 228
10.5.1 ##运算符 229
10.5.2 #运算符 231
10.5.3 #line命令 231
10.5.4 #error命令 232
10.6 程序实例 233
第11章 声明 241
11.1 存储类别 241
11.1.1 变量存储类别 241
11.1.2 函数存储类别 244
11.2 类型限定符 245
11.2.1 const限定符 245
11.2.2 volatile限定符 247
11.2.3 扩展限定符 248
11.3 声明模型 250
11.3.1 声明前部 250
11.3.2 声明器 252
11.3.3 声明模型 254
11.3.4 类型别名 258
11.4 小结 261
11.5 程序实例 261
11.5.1 动态规划 261
11.5.2 实例:最长公共子序列 262
11.5.3 实例:构造最大因式 265
第12章 软件项目开发 269
12.1 模块设计 269
12.1.1 编译与链接 270
12.1.2 模块设计 273
12.1.3 耦合度 277
12.1.4 内聚度 279
12.1.5 小结 280
12.2 模块实现 281
12.2.1 模块接口 281
12.2.2 混合语言编程 284
12.2.3 信息隐藏 288
12.2.4 程序实例 289
12.3 代码规范 301
12.3.1 整体布局 301
12.3.2 注释 302
12.3.3 命名 303
第13章 嵌入式程序设计 305
13.1 中断服务 305
13.1.1 中断源 305
13.1.2 中断向量 306
13.1.3 中断优先级 308
13.1.4 中断处理 308
13.1.5 中断服务的实现 309
13.2 输入与输出 310
13.2.1 输入电压 311
13.2.2 端口方向设定 312
13.2.3 按键检测 312
13.2.4 程序实例 312
13.3 定时器 316
13.3.1 工作原理 316
13.3.2 程序实例 317
13.4 模/数转换 321
13.4.1 工作原理 321
13.4.2 程序实例 322
13.5 异步串行通信 328
13.5.1 通用异步收发器 328
13.5.2 常用的异步通信协议 330
13.5.3 程序实例 331
第14章 集成开发环境 335
14.1 iDesigner概述 335
14.1.1 iDesigner安装 335
14.1.2 菜单与工具 336
14.1.3 解决方案与项目 337
14.2 编码辅助功能 338
14.2.1 成员信息 338
14.2.2 函数信息 339
14.2.3 定义与引用 339
14.2.4 智能显示 340
14.2.5 大纲显示 342
14.3 编译生成 342
14.3.1 生成 342
14.3.2 清理 342
14.3.3 重新生成 343
14.3.4 生成结果 343
14.4 调试 343
14.4.1 配置调试环境 343
14.4.2 执行控制 344
14.4.3 调试窗口 345
14.5 编程 346
第15章 iDesigner应用实例 348
15.1 生成项目 348
15.1.1 创建项目 348
15.1.2 编译项目 350
15.1.3 优化选项 351
15.2 调试项目 352
15.2.1 启动调试 352
15.2.2 变量监视功能 353
15.2.3 浮动监视 353
15.2.4 内存窗口 354
15.2.5 PC断点 355
15.2.6 禁用与删除断点 356
15.2.7 条件断点 356
15.2.8 调用堆栈 357
15.2.9 反汇编 357
15.2.10 调试反汇编 358
15.2.11 跑表窗口 359
15.3 编程工具 359
附录A 语言文法 363
附录B ASCII字符集 376
附录C HR系列单片机指令集 377
参考文献 401