第1章 概述 1
1.1 C语言的历史和特点 1
1.2一个小测验 5
1.3如何学好嵌入式系统中的C语言编程 8
1.3.1真正深刻地认识存储器 8
1.3.2认识和理解嵌入式C编程环境 9
1.3.3认识和掌握C语言中的常见陷阱 9
1.3.4掌握C语言程序设计过程中的调试方法 9
1.4推荐的参考书目 10
1.4.1 C语言的初级教材 10
1.4.2 C语言进阶书籍 10
1.5思考题 11
第2章C语言的关键字与运算符 12
2.1 C语言的关键字 12
2.1.1数据类型关键字 13
2.1.2控制语句关键字与相关语句 16
2.1.3存储类型关键字 23
2.1.4其他类型关键字 31
2.2 C语言的运算符 35
2.2.1运算符中需要注意的问题 36
2.2.2运算符的优先级 39
2.2.3表达式求值 41
2.2.4运算符的词法分析 42
2.3 C语言的指针 43
2.3.1指针的3个要素 44
2.3.2指针的类型 45
2.3.3指针的初始化 47
2.3.4指针的运算 47
2.3.5指针与字符串 48
2.4思考题 50
第3章C语言的函数 52
3.1 C语言的函数 52
3.1.1函数的声明、原型与返回值 52
3.1.2函数的参数 54
3.1.3可变参数的函数 55
3.1.4递归函数 56
3.2标准库函数 58
3.2.1输入与输出:〈stdio.h〉 59
3.2.2字符类别测试:〈ctype.h〉 66
3.2.3字符串函数:〈string.h〉 67
3.2.4数学函数:〈math.h〉 68
3.2.5实用函数:〈stdlib.h〉 70
3.2.6断言:〈assert.h〉 72
3.2.7可变参数表:〈stdarg.h〉 72
3.2.8非局部跳转:〈setjmp.h〉 73
3.2.9标准库函数与系统调用 73
3.3声明 76
3.4作用域与链接属性 77
3.4.1代码块作用域 77
3.4.2文件作用域 78
3.4.3函数作用域 79
3.4.4原型作用域 79
3.4.5链接属性 80
3.5 C的预编译处理 81
3.6思考题 82
第4章 编译、汇编与调试 83
4.1嵌入式软件开发流程与工具 83
4.1.1嵌入式软件开发的一般流程 83
4.1.2编译器简介 86
4.1.3链接器简介 87
4.1.4嵌入式软件开发的调试环境 89
4.1.5 ARM处理器的开发工具 98
4.2基于C语言软件项目中的文件关系 100
4.2.1 C语言项目中的文件依赖关系 100
4.2.2 Make文件 101
4.3 C代码与汇编 105
4.3.1 ATPCS 105
4.3.2 C与汇编的混合编程 109
4.3.3 ARM编译器对局部变量和入口参数的处理 111
4.4思考题 114
第5章 存储器与指针 116
5.1再论C语言中的指针 116
5.1.1指针与数组 116
5.1.2函数指针 120
5.2 C语言中的内存陷阱 127
5.2.1局部变量 128
5.2.2动态存储区 130
5.2.3函数的指针参数 137
5.3堆栈 141
5.3.1堆栈的作用 142
5.3.2函数调用栈帧与中断栈帧 144
5.3.3堆栈的跟踪与调试 146
5.4动态内存分配 148
5.4.1算法 148
5.4.2 malloc()函数 152
5.4.3 free()函数 157
5.5利用链表构建复杂数据结构 162
5.5.1 ASIX Window的数据结构 162
5.5.2 ASIX Window的窗口创建函数 164
5.5.3 ASIX Window的窗口删除函数 169
5.6思考题 174
第6章中断与设备驱动 178
6.1设备驱动简介 178
6.1.1设备驱动、Boot Loader与BSP 178
6.1.2设备驱动程序的结构 180
6.2中断与中断处理 185
6.2.1中断的重要性 185
6.2.2中断的分类与处理过程 185
6.2.3 C语言中的中断处理 186
6.2.4中断处理程序的编写 187
6.3函数的可重入问题 197
6.3.1什么是函数的重入 197
6.3.2函数可重入的条件 199
6.3.3不可重入函数的互斥保护 200
6.3.4重入函数的伪问题 202
6.4设备驱动案例——键盘驱动 203
6.4.1 5×5键盘的硬件原理 203
6.4.2键盘设备驱动实例 204
6.5启动代码——UBOOT分析 211
6.5.1系统启动与BootLoader 211
6.5.2 UBOOT技术实现分析 214
6.6思考题 218
第7章 编码风格 220
7.1简介及说明 220
7.2语言规则 224
7.2.1基础 224
7.2.2数据 228
7.2.3说明与表达式 230
7.2.4函数 231
7.2.5源文件 235
7.3风格指导 237
7.3.1程序的书写 237
7.3.2命名 240
7.4思考题 243
第8章 代码的调试 244
8.1 Bug与Debug 244
8.1.1初学者的困惑 245
8.1.2 Debug的手段和工具 246
8.2 Bug的定位与修正 248
8.2.1关注代码的层次与接口 248
8.2.2关注内存的访问越界 249
8.2.3关注边界情况 254
8.2.4 Bug的修正 255
8.3其他的方法和工具 256
8.3.1利用断言 256
8.3.2代码检查(Code Review) 258
8.3.3编译器的警告与Lint工具 259
8.3.4好的代码风格 260
8.4思考题 260
第9章ASIX Window GUI设计详解 262
9.1 ASIX Window概述 262
9.2 ASIX Windows底层软件平台的实现 263
9.2.1 ASIX OS对ASIX WIN在系统调用上的支持 264
9.2.2 ASIX GPC图形库的设计 267
9.2.3 ActiveArea和笔中断的设计 272
9.3 ASIX WIN系统任务管理模块的设计 276
9.4 ASIX WIN消息处理模块的设计 279
9.4.1 ASIX WIN消息机制的设计 280
9.4.2 ASIX WIN消息机制的应用流程 282
9.5 ASIX WIN窗口类管理模块的设计 284
9.6 ASIX WIN窗口及控件的实现 287
9.6.1 ASIX WIN窗口的实现 287
9.6.2 ASIX WIN控件的实现 291
9.7思考题 295
附录A C﹢﹢/C代码审查表(C语言部分) 296
附录B部分课后思考题解答 299
附录C嵌入式C语言测试样卷与参考答案 309
附录D UB4020MBT开发板简介 319
参考文献 321