当前位置:在线查询网 > 在线百科全书查询 > 嵌入式Linux上的C语言编程实践

嵌入式Linux上的C语言编程实践_在线百科全书查询


请输入要查询的词条内容:

嵌入式Linux上的C语言编程实践


《嵌入式Linux上的C语言编程实践》是由韩超编著的计算机应用技术类书籍;该书由电子工业出版社于2009年出版发行。讲解由浅入深,知识点突出,其中的一些示例取自常见技术和项目中的精华,工程应用性强。《嵌入式Linux上的C语言编程实践》适合高校学生阅读,帮助其向具有研发能力的工程技术人员过渡,同样也适用于嵌入式软件开发人员补充知识、开阔眼界。



图书信息


作 者:韩 超

出 版 社: 电子工业出版社

出版时间: 2009-2-1

页 数:392页

开 本: 16开

I S B N :9787121080722

所属分类: 图书 >> 计算机>>嵌入式开发

定价:49.00元

内容简介


目前嵌入式技术和Linux程序开发技术成为计算机界比较流行的两大技术。作为一种非常基础和常用的编程语言,C语言在嵌入式系统开发中体现了其强大的软硬件操控能力。本书重点关注嵌入式Linux中的C语言编程,目的在于帮助读者在基本掌握C语言的基础上,逐渐掌握嵌入式Linux中的C语言开发技术。本书包含程序环境搭建、调试技术、库函数、高级编程、程序优化等方面的知识。本书的讲解由浅入深,知识点突出,其中的一些示例取自常见技术和项目中的精华,工程应用性强。

本书适合高校学生阅读,帮助其向具有研发能力的工程技术人员过渡,同样也适用于嵌入式软件开发人员补充知识、开阔眼界。

作者简介


韩超,毕业于北京交通大学电子学院,曾在北京亚嵌教育研究中心担任嵌入式ARM-Linux系统平台的开发和教学工作,重视完整的知识体系与工程技术相结合。

魏治宇,毕业于北京交通大学电子学院,曾在北京亚嵌教育研究中心及其合作单位负责嵌入式Linux相关平台的教材编写、软件开发和实验教学工作,对嵌入式系统理论知识与产品快速开发之间的关联性有较深刻的理解。

寥文江,工学硕士,毕业于北京交通大学电子信息学院,目前在北京联合大学自动化学院从事嵌入式及Linux教学工作。研究方向为嵌入式实时操作系统、FPGA、Soc等,参与完成多项国家级、省部级科研项目并发表多篇学术论文。

前言


《嵌入式Linux上的C语言编程实践》是一本提高嵌入式开发基本功的图书。本书的关键词为“嵌入式”和“C语言”。C语言是当前嵌入式领域开发中使用的主要语言,也是嵌入式开发最重要的基本功所在。同时,嵌入式领域的发展也为C语言提供了广阔的应用场景。

本书特点

虽然以介绍C语言为主,但更重要的是体现了C语言、“嵌入式”和“Linux”的关系。

虽然是基于Linux开发环境来介绍C语言编程的知识和技巧,但是书中的开发理念和技巧也适用于其他操作系统。

深入地挖掘了C语言与硬件的关系,突出嵌入式系统中编程的基本理念。

目前单纯讲解C语言和嵌入式开发的书籍较多,但是将二者相结合的书籍还不多见,本书的目标就是将二者相结合,立志于提高读者在嵌入式开发中最重要的基本功。

本书结构

本书由五个部分组成,即按照知识的组织结构,分成基础知识、Linux环境中C语言的开发环境和工具、库函数、C语言高级编程和在嵌入式环境下的C语言编程。

第一部分(第1~2章):基础知识,体现本书Linux和嵌入式的特点。

第二部分(第3~6章):Linux环境中C语言的开发环境和工具,介绍最流行的文本编辑、程序开发、工程管理及调试工具。

第三部分(第7~8章):库函数,分两章、有重点地介绍C语言库函数的使用。

第四部分(第9~12章):C语言高级编程,介绍一些C语言常用的语法特性。

第五部分(第13~15章):在嵌入式环境下的C语言编程,主要关注C语言在嵌入式系统中的理念和方法。

通过阅读本书,读者可以提高C语言高级编程的能力;学习Linux环境中C语言编程的方法;深入地理解C语言与底层硬件控制的关系;理解C语言在嵌入式领域内的应用。读者可以在深入学习C语言的精华内容的同时,对嵌入式领域的开发有一个基本的了解。

阅读前的准备

阅读本书要求读者具有C语言编程的基础知识。在嵌入式开发领域,C语言也是最重要的编程语言之一,本书介绍了工程实践中嵌入式系统的C语言编程的一些要点。这样不仅可以使读者提高嵌入式系统开发的能力,又可以加深对C语言精髓的理解。

在本书的学习过程中,读者在手边应该至少准备一套Linux相关的C语言开发环境,推荐使用Ubuntu、Fedora或OpenSuse等Linux发行版,并且至少需要安装GCC工具。如果不方便使用Linux环境,也可以使用Windows中的Cygwin或DevC++。在文档方面,除了参考相关书籍之外,最好的方式是使用Linux中的man文档。推荐采用边学边练的方式,对于书中点到为止的知识,应深入学习、举一反三,以求达到事半功倍的效果。

本书由北京亚嵌教育研究中心组织编写,嵌入式系统资深工程师韩超结合该领域工程经验、知识技术传播经验、教学经验以及教材编写经验对全书进行规划,力求全书符合大陆读者阅读习惯并且具有实用价值。本书的第1章、第2章、第4至6章、第11至15章由韩超编写,第3章、第7章、第8章由魏治宇编写,第9章由廖文江编写,全书由韩超统稿。全书的审阅和修订工作由韩超及亚嵌教育研究中心完成。此外参与本书编写和审校工作的还有何晓龙、孙剑、夏鹏万等。

本书的编写结合了亚嵌教育研究中心的多位技术专家思想和教学思路,同时本书出版也是亚嵌多年开发和技术推广的努力成果。

目录


第一部分 基础知识

第1章 Linux环境下C语言的开发 2

1.1 Linux下的C语言开发环境 2

1.2 在Linux中使用C语言开发 3

1.2.1 开发流程和开发工具 3

1.2.2 Linux中程序的运行原理 4

第2章 嵌入式环境中的C语言开发 7

2.1 嵌入式C语言的开发环境 7

2.2 嵌入式开发中C语言编程要点 9

第二部分 Linux环境中

C语言的开发环境和工具

第3章 Linux的文本编辑工具VI 12

3.1 VI编辑器概述 12

3.1.1 VI简介 12

3.1.2 VI的工作模式和使用

3.1.2 之前的准备 12

3.1.3 进入和退出VI 13

3.2 VI的增强版VIM 16

3.3 VI编辑器的基本使用方法 17

3.3.1 在屏幕上移动光标 17

3.3.2 插入文本 20

3.3.3 删除文本 22

3.3.4 修改文本内容 25

3.3.5 替换文本内容 27

3.3.6 合并文本内容 30

3.3.7 移动文本内容 30

3.4 VI编辑器的命令和高级操作 32

3.4.1 VI常用命令的列表 32

3.4.2 VI的一些高级的操作和

3.1.2 使用技巧 35

第4章 GCC程序开发工具 39

4.1 GNU工具综述 39

4.2 GCC的编译和连接 43

4.2.1 工程示例 43

4.2.2 编译、汇编和连接 46

4.2.3 动态库 48

4.3 GCC的二进制工具 49

4.3.1 ar(归档工具) 49

4.3.2 readelf(读取ELF格式

3.1.2 文件信息) 51

4.3.3 strings(查看字符串) 54

4.3.4 nm(显示符号信息) 55

4.3.5 strip(删除符号) 57

4.3.6 objdump(显示目标

3.1.2 文件信息) 58

4.3.7 objcopy(复制目标文件) 63

第5章 make工程管理工具 67

5.1 make和Makefile 67

5.1.1 make机制概述 67

5.1.2 make和Makefile的使用 68

5.2 Makefile使用示例 69

5.2.1 简单的Makefile 69

5.2.2 Makefile中的依赖关系 71

5.2.3 Makefile中使用隐含规则

3.1.2 来编译程序 73

5.2.4 Makefile中指定依赖关系的

3.1.2 编译 76

5.3 自动生成Makefile 78

5.3.1 自动生成Makefile的意义和

3.1.2 相关工具 78

5.3.2 自动生成Makefile的流程 79

第6章 GDB调试工具 85

6.1 GDB简介 85

6.2 使用GDB调试程序 86

6.2.1 基本操作 88

6.2.2 查看命令 90

6.2.3 高级命令 92

6.2.4 attach命令的使用 94

6.3 远程GDB调试 95

6.3.1 本地GDB调试和远程GDB

3.1.2 调试的比较 95

6.3.2 远程GDB调试流程 97

6.3.3 远程GDB调试示例 98

第三部分 库函数

第7章 C语言标准库函数 106

7.1 ISO的C语言标准库函数

7.1 分类 106

7.2 标准格式化输入/输出类函数 107

7.2.1 scanf函数:格式化输入

3.1.2 字符串 107

7.2.2 printf函数:格式化输出

3.1.2 字符串 109

7.2.3 putchar函数:输出字符到

3.1.2 标准输出 111

7.2.4 getchar函数:从标准输入

3.1.2 获取字符 111

7.2.5 putc函数:向文件输出字符 112

7.2.6 getc函数:从文件输入字符 112

7.2.7 gets函数:获得字符串 112

7.2.8 puts函数:输出指定字符串 113

7.2.9 ungetc函数:把字符

3.1.2 写回流中 113

7.3 字符处理类函数 114

7.4 字符串处理及转换函数 116

7.4.1 sprintf函数:格式化输出

3.1.2 字符串到一个缓冲区 116

7.4.2 strcat和strncat函数:

3.1.2 字符串连接 119

7.4.3 strcpy和strncpy函数:

3.1.2 字符串复制 120

7.4.4 strcmp和strncmp函数:

3.1.2 字符串比较 121

7.4.5 strlen函数:获取字符串

3.1.2 长度 122

7.4.6 strchr和strrchr函数:字符/

3.1.2 字符串定位 122

7.4.7 strstr函数:字符串查找 123

7.4.8 strrev函数:字符串逆序 124

7.4.9 strupr和strlwr函数:字母

3.1.2 形式转换 125

7.4.10 strdup和strndup函数:

3.1.2 字符串复制 125

7.4.11 memset函数:内存设置 126

7.4.12 memmove函数:内存移动 126

7.4.13 memcmp函数:内存比较 127

7.4.14 memcpy函数:内存复制 128

7.5 数学计算类函数 128

7.6 数据结构和算法类函数 133

7.6.1 bsearch函数:二元搜索 133

7.6.2 lfind函数:线性搜索 134

7.6.3 lsearch函数:线性搜索 135

7.6.4 qsort函数:利用快速排序法

3.1.2 排列数组 136

7.6.5 rand函数:产生随机数 136

7.6.6 srand函数:设置随机

3.1.2 数种子 137

7.7 文件I/O操作类相关函数 137

7.7.1 fopen函数:打开文件 138

7.7.2 fclose函数:关闭文件 139

7.7.3 fgetc函数:从文件中读取

3.1.2 一个字符 139

7.7.4 fputc函数:将一指定字符

3.1.2 写入文件流中 139

7.7.5 fgets函数:从文件中读取

3.1.2 一字符串 140

7.7.6 fputs函数:将一指定的

3.1.2 字符串写入文件内 140

7.7.7 rewind函数:重设文件流的

3.1.2 读写位置为文件开头 141

7.7.8 ftell函数:取得文件流的

3.1.2 读取位置 141

7.7.9 fseek函数:移动文件流的

3.1.2 读写位置 141

7.7.10 fwrite函数:将数据写至

7.7.10 文件流 142

7.7.11 fread函数:从文件流读取

7.7.10 数据 142

7.7.12 remove函数:删除文件 143

7.7.13 rename函数:更改文件

7.7.10 名称或位置 143

7.7.14 freopen函数:重新打开

7.7.10 文件 144

7.7.15 fflush函数:同步缓冲区 144

7.7.16 fgetpos函数:获得文件

7.7.10 位置 145

7.7.17 fsetpos函数:设置文件

7.7.10 位置 145

7.7.18 mktemp函数:建立临时

7.7.10 文件 146

7.7.19 tmpfile函数:临时文件 146

7.7.20 tmpnam:得到临时文件名 147

7.8 日期时间类函数 147

7.8.1 clock函数:获得CPU时间 148

7.8.2 time函数:获得当前日历

7.8.2 时间 148

7.8.3 difftime函数:获得时间

7.8.2 差值 148

7.8.4 gmtime函数:将日历时间

7.8.2 转换成UTC时间 149

7.8.5 mktime函数:将UTC时间

7.8.2 转换成日历时间 149

7.8.6 asctime函数:将UTC时间

7.8.2 转换成字符串 149

7.8.7 ctime函数:将日历时间转换

7.8.2 成当地时间的字符串 150

7.8.8 localtime函数:将日历时间

7.8.2 转换成本地时间 150

7.8.9 strftime函数:转换日期和

7.8.2 时间格式 151

7.9 国际化和本地化函数 152

7.9.1 setlocale函数:本地化控制

7.8.2 函数 153

7.9.2 localeconv函数:本地化

7.8.2 转换 154

7.10 错误处理类函数 155

7.10.1 clearerr函数:清除流中的

7.10.1 结束指示符和错误指示符 155

7.10.2 feof函数:指示文件结束 155

7.10.3 ferror函数:指示文件出错 156

7.10.4 perror函数:输出出错信息 156

7.10.5 errno函数:错误编号记录 156

7.11 其他一些工具函数 157

7.11.1 assert函数:程序诊断 157

7.11.2 长跳转函数 157

7.11.3 可变长的参数控制函数 160

7.11.4 获取结构体成员函数

7.10.1 (宏) 161

7.12 一些标准库中有用的宏 161

第8章 Linux中C语言的扩展库

函数 163

8.1 文件I/O操作函数 163

8.1.1 open函数:打开文件 163

8.1.2 close函数:关闭文件 164

8.1.3 read函数:读文件 165

8.1.4 write函数:写文件 165

8.1.5 lseek函数:文件定位 167

8.1.6 ioctl函数:文件控制 167

8.1.7 flock函数:锁定文件 167

8.1.8 mmap函数和munmap函数:

8.1.8 内存映射 168

8.1.9 create函数:创建新文件 170

8.1.10 dup函数和dup2函数:

8.1.10 复制文件描述符 171

8.1.11 fcntl函数:改变已打开的

8.1.10 文件的属性 171

8.2 文件权限相关的操作函数 172

8.2.1 access函数:判断是否

8.2.1 具有存取文件的权限 172

8.2.2 chown函数和fchown函数:

8.2.1 改变文件的所有者 173

8.2.3 chmod函数和fchmod函数:

8.2.1 改变权限 173

8.2.4 unlink函数:删除文件 173

8.2.5 utime函数和utimes函数:

8.2.1 改变文件时间 174

8.2.6 umask函数:设置建立

8.2.1 新文件时的权限掩码 175

8.2.7 link函数:建立文件连接 175

8.2.8 stat函数、fstat函数和lstat

8.2.1 函数:获取文件信息 175

8.3 用户组操作函数 176

8.3.1 getgid函数和setgid函数:

8.2.1 获得/设置组识别码 176

8.3.2 getegid函数和setegid函数:

8.2.1 获得/设置有效的组识别码 177

8.3.3 getuid函数和setuid函数:

8.2.1 获得/设置真实的用户识别码 177

8.3.4 geteuid函数和seteuid函数:

8.2.1 获得/设置有效的用户识别码 178

8.3.5 getgroups函数和setgroups

8.2.1 函数:获得/设置组代码 178

8.4 信号类函数 179

8.4.1 kill函数:传送信号给指定的

8.2.1 进程 181

8.4.2 raise函数:信号发送函数 181

8.4.3 alarm函数:设置超时函数 182

8.4.4 signal函数:信号安装函数 182

8.5 进程处理函数 183

8.5.1 getpid函数和getppid函数:

8.2.1 获得进程ID和父进程ID 183

8.5.2 fork函数:建立子进程 183

8.5.3 sleep函数和usleep函数:

8.2.1 让进程暂停执行一段时间 185

8.5.4 exec函数族:找到可执行

8.2.1 文件 185

8.5.5 _ exit函数和_Exit函数:

8.2.1 结束进程执行 188

第四部分 C语言高级编程

第9章 动态内存的堆与栈 190

9.1 程序内存区域的使用 190

9.1.1 静态内存与动态内存 190

9.1.2 C语言中的动态内存 191

9.2 C程序中栈空间的使用 196

9.2.1 参数使用栈空间 196

9.2.2 自动变量使用栈空间 199

9.2.3 程序中较大的栈 201

9.2.4 栈空间的特性 202

9.3 C程序中的堆空间使用 203

9.3.1 分配和释放堆内存的库函数 203

9.3.2 库函数使用 204

9.3.3 堆内存的特性 218

9.4 堆内存和栈内存使用的比较 222

9.4.1 利用返回值传递信息 222

9.4.2 利用参数传递信息 226

9.4.3 堆与栈内存管理的区别 231

第10章 函数指针的使用 232

10.1 函数指针的概念 232

10.1.1 C语言函数的本质 232

10.1.2 函数指针在C语言中的

10.1.2 意义 234

10.2 函数指针的使用 237

10.2.1 函数指针使用初步 237

10.2.2 函数指针的类型定义 240

10.2.3 函数指针作为结构体成员 242

10.2.4 函数指针作为函数的参数 243

10.2.5 函数指针作为函数的

10.2.5 返回值 244

10.2.6 函数指针数组 246

10.3 函数指针使用示例 248

第11章 回调函数的使用 252

11.1 回调函数的概念与作用 252

11.1.1 程序调用的方式 252

11.1.2 回调函数的作用 254

11.2 回调函数的语法 254

11.2.1 简单的回调函数 254

11.2.2 完全形式的回调函数 256

11.3 回调函数的使用 259

11.3.1 qsort中的回调函数 259

11.3.2 atexit和on_exit函数的

10.2.5 注册退出函数 263

第12章 C语言实现对象编程 268

12.1 C语言实现基于对象编程的

12.1 概念与作用 268

12.2 C语言基于对象编程实现

12.1 封装 269

12.2.1 简单的程序示例 269

12.2.2 C语言基于对象编程的

10.2.5 详解 272

12.2.3 C语言基于对象编程与

10.2.5 C++面向对象编程的对比 275

12.3 C语言基于对象编程实现

12.3 部分继承功能 278

12.3.1 利用数据结构的包含实现

10.2.5 继承功能 279

12.3.2 利用私有指针实现继承

10.2.5 功能 282

12.3.3 C语言实现继承的总结 287

12.4 C语言基于对象编程实现

12.4 部分多态功能 288

12.4.1 利用操作指针组的包含

10.2.5 实现多态功能 288

12.4.2 C语言实现多态功能的总结 292

12.5 对C语言实现基于对象

12.5 编程的思考 292

12.5.1 C语言基于对象编程的

10.2.5 特性 292

12.5.2 C语言基于对象编程中接口、

10.2.5 实现和调用者的关系 293

第五部分 在嵌入式

环境下的C语言编程

第13章 C语言程序的内存布局 295

13.1 C语言程序的存储区域 295

13.2 C语言程序的段 297

13.2.1 段的分类 297

13.2.2 程序中段的使用 298

13.3 可执行程序的连接 301

13.3.1 可执行程序的组成 301

13.3.2 各个目标文件的关系 303

13.3.3 连接错误示例 304

13.4 C语言程序的运行 309

13.4.1 RAM调试运行 311

13.4.2 固化程序的XIP运行 312

13.4.3 固化程序的加载运行 313

13.4.4 C语言程序的运行总结 315

第14章 嵌入式C语言常用语法 317

14.1 内存指针操作 317

14.1.1 内存操作的意义 317

14.1.2 使用指针操作内存 319

14.1.3 volatile的使用 324

14.1.4 嵌入式系统指针的实际

10.2.5 应用 325

14.2 位操作 327

14.2.1 位操作的意义 327

14.2.2 位操作的语法 328

14.3 大小端与对齐问题 330

14.3.1 大小端问题 331

14.3.2 内存对齐问题 335

14.3.3 结构体成员的对齐问题 338

14.4 程序的跳转 344

14.4.1 嵌入式系统程序跳转的

10.2.5 类型 344

14.4.2 C语言中实现程序的跳转 345

第15章 嵌入式C语言编程的技巧 348

15.1 程序的优化技巧 348

15.1.1 循环缓冲区 348

15.1.2 查表法 350

15.1.3 针对循环执行效率的

10.2.5 优化 353

15.2 关于小数运算 355

15.3 函数参数和返回值的传递 357

15.4 变量的初始化技巧 360

15.4.1 数组的初始化 360

15.4.2 结构体的初始化 362

15.4.3 变量的初始化总结 362

15.5 程序的调试和宏使用的技巧 363

15.5.1 打印文件、函数和程序行 363

15.5.2 #:字符串化操作符 364

15.5.3 ##:连接操作符 366

15.5.4 调试宏的第一种定义方式 367

15.5.5 调试宏的第二种定义方式 368

15.5.6 对调试语句进行分级审查 369

15.5.7 条件编译调试语句 370

15.5.8 使用do…while的宏定义 372

15.6 代码剖析 373

参考文献 378