书籍详情
嵌入式C语言技术实战开发
作者:杨源鑫,侯继红,陈锦勇,刘凯强 著
出版社:北京航空航天大学出版社
出版时间:2018-05-01
ISBN:9787512427105
定价:¥69.00
购买这本书可以去
内容简介
嵌入式C语言技术实战开发 本书详细介绍了嵌入式开发和嵌入式Linux系统开发的基础知识,主要讲解:嵌入式Linux系统的基础知识;C语言在嵌入式开发中的应用;嵌入式Linux应用开发基础,如系统文件I/O 编程、进程、线程、进程间通信和网络编程,并结合若干项目,熟悉C语言在Linux应用开发中的流程和思路;C语言在Linux驱动中的应用。本书通过大量实战项目,帮助读者融会贯通,使读者在实战中学到技术的精髓。 本书可作为计算机类专业本科生以及相关专业专科生编程类课程的教材,也可作为嵌入式开发的自学人员和工程技术人员的培训教材和参考用书。
作者简介
杨源鑫,CSDN博客专家,CSDN学院讲师,资深嵌入式系统工程师,先后在伟易达集团,深圳砺剑防卫科技有限公司等从事嵌入式产品相关的研发,软件架构设计,集成测试,交流指导等工作,涵盖的范围主要有单片机、Linux、Android、Window等方向的软件层次的开发,具有丰富实战开发经验;他还积极将自己所学所用的所识以及个人工作经验总结进行分享,仅在CSDN就分享了数百篇原创文章,累计阅读量超过百万人次。 侯继红,广州科技贸易职业学院电子信息工程技术专业教师,主要担任单片机应用技术、CPLD/FPGA应用技术、PCB应用技术课程的教学工作及企业项目开发工作。有丰富的教学经验及工程项目设计实践经验。同时编写出版多本嵌入式开发实战书籍。 陈锦勇,目前为珠海爱肯智能设备有限公司研发部技术总监,曾在知名培训机构担任嵌入式开发讲师,有多年的研发经验,对单片机,linux,Android有深入的实战经验。 刘凯强,目前为深圳科曼信息技术有限公司任职嵌入式开发工程师,现今主要从事Android底层和framework层的开发工作。
目录
第1章 什么是嵌入式开发……………………………………………………………… 1
1.1 概 述 …………………………………………………………………………… 1
1.2 嵌入式开发需要哪些知识储备 ………………………………………………… 1
1.2.1 嵌入式硬件知识 …………………………………………………………… 1
1.2.2 嵌入式软件知识 …………………………………………………………… 5
1.3 常见的嵌入式开发平台 ………………………………………………………… 5
1.3.1 单片机系列 ………………………………………………………………… 5
1.3.2 ARM 系列 ………………………………………………………………… 5
1.4 嵌入式ARM Linux系统的构成 ……………………………………………… 6
1.4.1 硬件电路基础 ……………………………………………………………… 6
1.4.2 bootloader ………………………………………………………………… 6
1.4.3 内 核 ……………………………………………………………………… 6
1.4.4 文件系统 …………………………………………………………………… 6
1.4.5 应用程序 …………………………………………………………………… 6
1.5 本章小结 ………………………………………………………………………… 8
第2章 嵌入式Linux系统基础………………………………………………………… 9
2.1 Linux系统简介 ………………………………………………………………… 9
2.1.1 使用Vmware虚拟机安装Linux操作系统 …………………………… 12
2.1.2 Linux的基本命令 ………………………………………………………… 19
2.2 Linux中vim编辑器的操作与编程…………………………………………… 35
2.2.1 vim编辑器的操作………………………………………………………… 35
2.2.2 在Linux下快速入门Linux C语言编程 ……………………………… 41
2.2.3 在Linux下使用GDB调试代码 ………………………………………… 43
2.2.4 在Linux下Shell脚本基础编程快速入门 ……………………………… 47
2.3 利用 Makefile管理软件工程 ………………………………………………… 59
2.4 在Linux下制作静态库和动态链接库的方法 ……………………………… 62
2.5 本章小结………………………………………………………………………… 64
第3章 C语言在嵌入式开发中的应用 ……………………………………………… 65
3.1 嵌入式开发必知必会…………………………………………………………… 65
3.1.1 数据段、代码段、堆栈段、BSS段的区别 ………………………………… 65
3.1.2 位、字、字节、字符等基础知识 …………………………………………… 68
3.1.3 进制转换基础……………………………………………………………… 68
3.1.4 嵌入式常用位运算基础与深入学习……………………………………… 71
3.2 位运算项目……………………………………………………………………… 74
3.2.1 应用(一):如何分离一个数的高低位 …………………………………… 74
3.2.2 应用(二):如何将两个字节合并为一个字节 …………………………… 76
3.2.3 应用(三):Linux内核中实现的高低位互换函数 ……………………… 77
3.2.4 应用(四):用嵌入式C语言快速翻转一个数的二进制高低位 ………… 78
3.2.5 实战1:如何对一个有规律的数组表进行位移(LED彩灯案例)……… 80
3.2.6 实战2:分离一个十六进制数取出相应的位1或位0
(简单的音频解码案例)…………………………………………………… 82
3.3 预处理、 const、static以及字符串处理在嵌入式中的应用 ………………… 86
3.3.1 宏定义与typedef的区别 ………………………………………………… 86
3.3.2 const关键字 ……………………………………………………………… 96
3.3.3 static关键字 ……………………………………………………………… 98
3.3.4 sizeof运算符 …………………………………………………………… 103
3.3.5 strcat 函数 ……………………………………………………………… 105
3.3.6 strcpy函数 ……………………………………………………………… 107
3.3.7 strlen函数 ……………………………………………………………… 109
3.3.8 strcmp函数 ……………………………………………………………… 111
3.4 C语言的内存管理与指针 …………………………………………………… 113
3.4.1 一维数组 ………………………………………………………………… 113
3.4.2 二维数组 ………………………………………………………………… 119
3.4.3 C语言之指针 …………………………………………………………… 122
3.4.4 为什么内存是线性分布的 ……………………………………………… 131
3.4.5 深入浅出剖析函数指针与回调函数 …………………………………… 135
3.5 谁说面向过程的C语言不能面向对象 ……………………………………… 144
3.5.1 C语言之结构体 ………………………………………………………… 144
3.5.2 C语言之结构体对齐 …………………………………………………… 147
3.5.3 C语言结构体实现原理深入分析 ……………………………………… 150
3.5.4 结构体的封装性之结构体内嵌函数指针 ……………………………… 152
3.5.5 结构体的继承性之结构体内嵌结构体 ………………………………… 153
3.5.6 结构体的多态性之结构体中的void *万能指针……………………… 155
3.5.7 Linux内核中offsetof宏与container_of宏深度剖析 ………………… 157
3.5.8 什么是共用体、联合体与大小端………………………………………… 160
3.6 C语言之标准C文件操作应用 ……………………………………………… 163
3.6.1 fopen函数和fclose函数 ……………………………………………… 163
3.6.2 fread函数和fwrite函数………………………………………………… 165
3.6.3 fseek函数………………………………………………………………… 167
3.6.4 sprintf函数 ……………………………………………………………… 168
3.7 一定要掌握的基本数据结构 ………………………………………………… 170
3.7.1 链 表 …………………………………………………………………… 170
3.7.2 队 列 …………………………………………………………………… 179
3.7.3 栈 ………………………………………………………………………… 181
3.8 实战项目 ……………………………………………………………………… 184
3.8.1 熟悉STM32单片机库函数的使用 …………………………………… 184
3.8.2 弹弹方块C语言实现…………………………………………………… 194
3.8.3 学生信息管理系统的实现 ……………………………………………… 201
3.8.4 空洞文件与一次性产生多个文件 ……………………………………… 216
3.8.5 CheckSum软件的设计原理与应用 …………………………………… 218
3.8.6 使用C语言编写一个将二进制文件转换为C数组头文件的程序 …… 220
3.8.7 数据压缩与解压缩算法的C语言实现 ………………………………… 224
3.8.8 字符串编码解压缩算法 ………………………………………………… 227
3.8.9 C语言之查表法项目运用 ……………………………………………… 229
3.9 本章小结 ……………………………………………………………………… 231
第4章 嵌入式Linux应用开发基础………………………………………………… 232
4.1 文件I/O基础编程 …………………………………………………………… 232
4.1.1 open函数与close函数 ………………………………………………… 233
4.1.2 read函数与write函数 ………………………………………………… 235
4.1.3 lseek函数………………………………………………………………… 237
4.1.4 ioctl函数 ………………………………………………………………… 238
4.1.5 opendir函数、readdir函数与closedir函数 …………………………… 239
4.1.6 stat函数 ………………………………………………………………… 240
4.1.7 文件I/O小结 …………………………………………………………… 242
4.2 进程的实战开发 ……………………………………………………………… 242
4.2.1 进程的定义 ……………………………………………………………… 242
4.2.2 进程与程序的区别 ……………………………………………………… 243
4.2.3 fork函数 ………………………………………………………………… 243
4.2.4 vfork函数 ……………………………………………………………… 246
4.2.5 exec函数族 ……………………………………………………………… 248
4.2.6 特殊进程 ………………………………………………………………… 251
4.3 进程间通信 …………………………………………………………………… 256
4.3.1 管 道 …………………………………………………………………… 257
4.3.2 消息队列 ………………………………………………………………… 261
4.3.3 共享内存 ………………………………………………………………… 268
4.3.4 信 号 …………………………………………………………………… 274
4.3.5 信号量 …………………………………………………………………… 278
4.4 多线程编程 …………………………………………………………………… 281
4.4.1 线程与多线程的定义 …………………………………………………… 281
4.4.2 进程与线程的区别与联系 ……………………………………………… 281
4.5 网络编程 ……………………………………………………………………… 287
4.5.1 TCP/IP协议栈 ………………………………………………………… 287
4.5.2 TCP协议 ………………………………………………………………… 288
4.5.3 UDP协议………………………………………………………………… 300
4.6 实战项目 ……………………………………………………………………… 304
4.6.1 Linux下音频应用编程 ………………………………………………… __________304
4.6.2 Linux下FrameBuffer简介 …………………………………………… 314
4.6.3 Linux下C语言BMP图操作编程 …………………………………… 320
4.6.4 Linux下C语言input系统应用编程 ………………………………… 324
4.6.5 简易Linux终端版聊天室应用编程 …………………………………… 329
4.7 本章小结 ……………………………………………………………………… 338
第5章 C语言在Linux驱动中的应用 ……………………………………………… 339
5.1 简单的Kconfig编程 ………………………………………………………… 339
5.2 手把手教你实现字符设备驱动 ……………………………………………… 345
5.3 手把手教你实现 misc设备驱动……………………………………………… 355
5.4 手把手教你实现外部中断 …………………………………………………… 359
5.5 手把手教你实现中断底半部tasklet实现…………………………………… 364
5.6 手把手教你实现中断底半部work queue…………………………………… 371
5.7 手把手教你实现简单的Linux定时器 ……………………………………… 375
5.8 手把手教你实现input设备驱动程序 ……………………………………… 379
5.9 本章小结 ……………………………………………………………………… 386
参考文献………………………………………………………………………………… 387
后 记………………………………………………………………………………… 389
1.1 概 述 …………………………………………………………………………… 1
1.2 嵌入式开发需要哪些知识储备 ………………………………………………… 1
1.2.1 嵌入式硬件知识 …………………………………………………………… 1
1.2.2 嵌入式软件知识 …………………………………………………………… 5
1.3 常见的嵌入式开发平台 ………………………………………………………… 5
1.3.1 单片机系列 ………………………………………………………………… 5
1.3.2 ARM 系列 ………………………………………………………………… 5
1.4 嵌入式ARM Linux系统的构成 ……………………………………………… 6
1.4.1 硬件电路基础 ……………………………………………………………… 6
1.4.2 bootloader ………………………………………………………………… 6
1.4.3 内 核 ……………………………………………………………………… 6
1.4.4 文件系统 …………………………………………………………………… 6
1.4.5 应用程序 …………………………………………………………………… 6
1.5 本章小结 ………………………………………………………………………… 8
第2章 嵌入式Linux系统基础………………………………………………………… 9
2.1 Linux系统简介 ………………………………………………………………… 9
2.1.1 使用Vmware虚拟机安装Linux操作系统 …………………………… 12
2.1.2 Linux的基本命令 ………………………………………………………… 19
2.2 Linux中vim编辑器的操作与编程…………………………………………… 35
2.2.1 vim编辑器的操作………………………………………………………… 35
2.2.2 在Linux下快速入门Linux C语言编程 ……………………………… 41
2.2.3 在Linux下使用GDB调试代码 ………………………………………… 43
2.2.4 在Linux下Shell脚本基础编程快速入门 ……………………………… 47
2.3 利用 Makefile管理软件工程 ………………………………………………… 59
2.4 在Linux下制作静态库和动态链接库的方法 ……………………………… 62
2.5 本章小结………………………………………………………………………… 64
第3章 C语言在嵌入式开发中的应用 ……………………………………………… 65
3.1 嵌入式开发必知必会…………………………………………………………… 65
3.1.1 数据段、代码段、堆栈段、BSS段的区别 ………………………………… 65
3.1.2 位、字、字节、字符等基础知识 …………………………………………… 68
3.1.3 进制转换基础……………………………………………………………… 68
3.1.4 嵌入式常用位运算基础与深入学习……………………………………… 71
3.2 位运算项目……………………………………………………………………… 74
3.2.1 应用(一):如何分离一个数的高低位 …………………………………… 74
3.2.2 应用(二):如何将两个字节合并为一个字节 …………………………… 76
3.2.3 应用(三):Linux内核中实现的高低位互换函数 ……………………… 77
3.2.4 应用(四):用嵌入式C语言快速翻转一个数的二进制高低位 ………… 78
3.2.5 实战1:如何对一个有规律的数组表进行位移(LED彩灯案例)……… 80
3.2.6 实战2:分离一个十六进制数取出相应的位1或位0
(简单的音频解码案例)…………………………………………………… 82
3.3 预处理、 const、static以及字符串处理在嵌入式中的应用 ………………… 86
3.3.1 宏定义与typedef的区别 ………………………………………………… 86
3.3.2 const关键字 ……………………………………………………………… 96
3.3.3 static关键字 ……………………………………………………………… 98
3.3.4 sizeof运算符 …………………………………………………………… 103
3.3.5 strcat 函数 ……………………………………………………………… 105
3.3.6 strcpy函数 ……………………………………………………………… 107
3.3.7 strlen函数 ……………………………………………………………… 109
3.3.8 strcmp函数 ……………………………………………………………… 111
3.4 C语言的内存管理与指针 …………………………………………………… 113
3.4.1 一维数组 ………………………………………………………………… 113
3.4.2 二维数组 ………………………………………………………………… 119
3.4.3 C语言之指针 …………………………………………………………… 122
3.4.4 为什么内存是线性分布的 ……………………………………………… 131
3.4.5 深入浅出剖析函数指针与回调函数 …………………………………… 135
3.5 谁说面向过程的C语言不能面向对象 ……………………………………… 144
3.5.1 C语言之结构体 ………………………………………………………… 144
3.5.2 C语言之结构体对齐 …………………………………………………… 147
3.5.3 C语言结构体实现原理深入分析 ……………………………………… 150
3.5.4 结构体的封装性之结构体内嵌函数指针 ……………………………… 152
3.5.5 结构体的继承性之结构体内嵌结构体 ………………………………… 153
3.5.6 结构体的多态性之结构体中的void *万能指针……………………… 155
3.5.7 Linux内核中offsetof宏与container_of宏深度剖析 ………………… 157
3.5.8 什么是共用体、联合体与大小端………………………………………… 160
3.6 C语言之标准C文件操作应用 ……………………………………………… 163
3.6.1 fopen函数和fclose函数 ……………………………………………… 163
3.6.2 fread函数和fwrite函数………………………………………………… 165
3.6.3 fseek函数………………………………………………………………… 167
3.6.4 sprintf函数 ……………………………………………………………… 168
3.7 一定要掌握的基本数据结构 ………………………………………………… 170
3.7.1 链 表 …………………………………………………………………… 170
3.7.2 队 列 …………………………………………………………………… 179
3.7.3 栈 ………………………………………………………………………… 181
3.8 实战项目 ……………………………………………………………………… 184
3.8.1 熟悉STM32单片机库函数的使用 …………………………………… 184
3.8.2 弹弹方块C语言实现…………………………………………………… 194
3.8.3 学生信息管理系统的实现 ……………………………………………… 201
3.8.4 空洞文件与一次性产生多个文件 ……………………………………… 216
3.8.5 CheckSum软件的设计原理与应用 …………………………………… 218
3.8.6 使用C语言编写一个将二进制文件转换为C数组头文件的程序 …… 220
3.8.7 数据压缩与解压缩算法的C语言实现 ………………………………… 224
3.8.8 字符串编码解压缩算法 ………………………………………………… 227
3.8.9 C语言之查表法项目运用 ……………………………………………… 229
3.9 本章小结 ……………………………………………………………………… 231
第4章 嵌入式Linux应用开发基础………………………………………………… 232
4.1 文件I/O基础编程 …………………………………………………………… 232
4.1.1 open函数与close函数 ………………………………………………… 233
4.1.2 read函数与write函数 ………………………………………………… 235
4.1.3 lseek函数………………………………………………………………… 237
4.1.4 ioctl函数 ………………………………………………………………… 238
4.1.5 opendir函数、readdir函数与closedir函数 …………………………… 239
4.1.6 stat函数 ………………………………………………………………… 240
4.1.7 文件I/O小结 …………………………………………………………… 242
4.2 进程的实战开发 ……………………………………………………………… 242
4.2.1 进程的定义 ……………………………………………………………… 242
4.2.2 进程与程序的区别 ……………………………………………………… 243
4.2.3 fork函数 ………………………………………………………………… 243
4.2.4 vfork函数 ……………………………………………………………… 246
4.2.5 exec函数族 ……………………………………………………………… 248
4.2.6 特殊进程 ………………………………………………………………… 251
4.3 进程间通信 …………………………………………………………………… 256
4.3.1 管 道 …………………………………………………………………… 257
4.3.2 消息队列 ………………………………………………………………… 261
4.3.3 共享内存 ………………………………………………………………… 268
4.3.4 信 号 …………………………………………………………………… 274
4.3.5 信号量 …………………………………………………………………… 278
4.4 多线程编程 …………………………………………………………………… 281
4.4.1 线程与多线程的定义 …………………………………………………… 281
4.4.2 进程与线程的区别与联系 ……………………………………………… 281
4.5 网络编程 ……………………………………………………………………… 287
4.5.1 TCP/IP协议栈 ………………………………………………………… 287
4.5.2 TCP协议 ………………………………………………………………… 288
4.5.3 UDP协议………………………………………………………………… 300
4.6 实战项目 ……………………………………………………………………… 304
4.6.1 Linux下音频应用编程 ………………………………………………… __________304
4.6.2 Linux下FrameBuffer简介 …………………………………………… 314
4.6.3 Linux下C语言BMP图操作编程 …………………………………… 320
4.6.4 Linux下C语言input系统应用编程 ………………………………… 324
4.6.5 简易Linux终端版聊天室应用编程 …………………………………… 329
4.7 本章小结 ……………………………………………………………………… 338
第5章 C语言在Linux驱动中的应用 ……………………………………………… 339
5.1 简单的Kconfig编程 ………………………………………………………… 339
5.2 手把手教你实现字符设备驱动 ……………………………………………… 345
5.3 手把手教你实现 misc设备驱动……………………………………………… 355
5.4 手把手教你实现外部中断 …………………………………………………… 359
5.5 手把手教你实现中断底半部tasklet实现…………………………………… 364
5.6 手把手教你实现中断底半部work queue…………………………………… 371
5.7 手把手教你实现简单的Linux定时器 ……………………………………… 375
5.8 手把手教你实现input设备驱动程序 ……………………………………… 379
5.9 本章小结 ……………………………………………………………………… 386
参考文献………………………………………………………………………………… 387
后 记………………………………………………………………………………… 389
猜您喜欢