第1章 嵌入式Linux C语言开发工具 1
1.1嵌入式Linux下C语言概述 2
1.1.1 C语言简史 2
1.1.2 C语言特点 2
1.1.3嵌入式Linux C语言编程环境 3
1.2嵌入式Linux编辑器vi的使用 3
1.2.1 vi的基本模式 4
1.2.2 vi的基本操作 4
1.2.3 vi的使用实例分析 8
1.3嵌入式Linux编译器GCC的使用 9
1.3.1 GCC概述 9
1.3.2 GCC编译流程分析 10
1.3.3 GCC警告提示 12
1.3.4 GCC使用库函数 14
1.3.5 GCC代码优化 15
1.4嵌入式Linux调试器GDB的使用 16
1.4.1 GDB使用实例 16
1.4.2设置/删除断点 19
1.4.3数据相关命令 20
1.4.4调试运行环境相关命令 20
1.4.5堆栈相关命令 21
1.5 make工程管理器 21
1.5.1 Makefile基本结构 22
1.5.2 Makefile变量 23
1.5.3 Makefile规则 26
1.5.4 make使用 27
小结 28
思考与练习 28
第2章 数据 29
2.1 ANSI C与GNU C 30
2.1.1 ANSI C简介 30
2.1.2 GNU C简介 30
2.2基本数据类型 31
2.2.1整型家族 31
2.2.2实型家族 33
2.2.3字符型家族 35
2.2.4枚举家族 37
2.2.5指针家族 38
2.3变量与常量 39
2.3.1变量的定义 39
2.3.2 typedef 40
2.3.3常量的定义 41
2.3.4作用域 41
2.3.5存储模型 44
2.4预处理 47
2.4.1预定义 47
2.4.2文件包含 53
2.4.3条件编译 53
2.5需要注意的问题 55
2.5.1字长和数据类型 55
2.5.2数据对齐 56
2.5.3字节序 56
小结 57
思考与练习 57
第3章 数据的输入输出 58
3.1数据的输出 59
3.1.1字符输出函数putchar 59
3.1.2格式化输出函数printf 59
3.2数据的输入 62
3.2.1字符输入函数getchar 62
3.2.2格式化输入函数scanf 63
3.3数据输入输出综合示例 68
3.4字符串输入输出函数 70
小结 71
思考与练习 72
第4章 运算符和表达式 73
4.1概述 74
4.2运算符和表达式 74
4.2.1算术运算符和表达式 74
4.2.2赋值运算符和表达式 77
4.2.3逗号运算符和表达式 80
4.2.4位运算符和表达式 81
4.2.5关系运算符和表达式 84
4.2.6逻辑运算符和表达式 86
4.2.7 sizeof操作符 89
4.2.8条件运算符 90
4.2.9运算符优先级总结 91
小结 93
思考与练习 93
第5章 程序结构和控制语句 94
5.1 C语言程序结构 95
5.2 C语言控制语句 95
5.2.1条件判断语句 95
5.2.2循环语句 105
5.2.3转向语句 109
小结 112
思考与练习 112
第6章 数组 114
6.1一维数组 115
6.1.1数组的定义 115
6.1.2一维数组的引用 115
6.1.3一维数组的初始化 117
6.1.4一维数组的内存分配 118
6.1.5一维数组程序举例 119
6.2多维数组 121
6.2.1多维数组定义及初始化 121
6.2.2二维数组的内存分配 122
6.2.3深入理解二维数组 123
6.2.4二维数组程序举例 124
6.3字符数组 126
6.4字符串 127
6.4.1字符串的定义 127
6.4.2字符串的输入输出 127
6.4.3字符串处理函数 129
小结 133
思考与练习 133
第7章 指针 134
7.1指针基础 135
7.1.1指针变量的定义 135
7.1.2指针变量的赋值 135
7.1.3指针变量的引用 136
7.2指针的运算 139
7.2.1指针的算术运算 140
7.2.2指针的关系运算 141
7.2.3空指针 144
7.3指针与数组 145
7.3.1指针与一维数组 145
7.3.2指针与多维数组 147
7.4多级指针 150
7.4.1多级指针的定义及引用 150
7.4.2多级指针的运算 152
7.5指针数组 152
7.5.1指针数组的定义及初始化 152
7.5.2理解指针数组名 153
7.6 const与指针 155
7.7 void指针 157
7.8字符指针 158
7.8.1字符串 158
7.8.2字符指针数组 159
小结 160
思考与练习 161
第8章 函数 162
8.1函数基础 163
8.1.1函数定义和声明 163
8.1.2函数的调用、参数传递和返回值 164
8.1.3函数和数组 171
8.1.4 main函数的参数 173
8.2指针函数 174
8.2.1指针函数的定义和使用 174
8.2.2指针函数程序举例 177
8.3函数指针 179
8.3.1函数指针的声明 179
8.3.2定义函数指针类型 180
8.3.3函数指针数组 181
8.3.4函数指针程序举例 182
8.4递归函数 184
8.4.1递归函数的定义 184
8.4.2函数调用机制说明 185
8.4.3递归调用的形式 185
8.4.4递归的条件 186
8.5回调函数 187
8.5.1回调函数的定义 187
8.5.2回调函数实现机制 188
8.5.3自定义回调函数 188
8.5.4嵌入式开发中常见的回调函数 189
8.6 attbute机制介绍 189
小结 195
思考与练习 195
第9章 用户自定义数据类型 196
9.1结构体 197
9.1.1结构体的定义 197
9.1.2结构体变量的声明、使用及初始化 199
9.1.3结构体数组 206
9.1.4结构体指针 210
9.2位域 211
9.2.1位域的定义 211
9.2.2位域变量的说明 213
9.2.3位域的使用 214
9.3共用体 215
9.4枚举 217
9.4.1枚举类型的定义 218
9.4.2枚举变量的声明和使用 219
小结 221
思考与练习 221
第10章 嵌入式C语言的高级用法 223
10.1内存管理 224
10.2动态内存的申请和释放 225
10.2.1 malloc函数 225
10.2.2 free函数 226
10.2.3关于野指针 228
10.3堆和栈的区别 230
10.4动态内存程序举例 231
10.5 C语言和汇编语言的接口 233
10.5.1内联汇编的语法 233
10.5.2编译器优化介绍 236
10.5.3 C语言关键字volatile 236
10.5.4 “memory”描述符 236
小结 236
思考与练习 236
第11章 嵌入式Linux内核常见数据结构 239
11.1链表 240
11.1.1单向链表 240
11.1.2双向链表 243
11.1.3循环链表 245
11.1.4 ARM Linux中链表使用实例 245
11.2树、二叉树、平衡树 247
11.2.1树的定义 247
11.2.2二叉树 248
11.2.3平衡树 254
11.2.4 ARM Linux中红黑树使用实例 255
11.3哈希表 258
11.3.1哈希表的概念及作用 258
11.3.2哈希表的构造方法 259
11.3.3哈希表的处理冲突方法 260
11.3.4 ARM Linux中哈希表使用实例 262
小结 263
思考与练习 263