Author:华清远见嵌入式学院 & 冯利美 & 冯建
随着消费群体对产品要求的日益提高,嵌入式技术在机械器具制造、电子产品制造、通信、信息服务等行业领域得到了大显身手的机会,应用日益广泛,相应地企业对嵌入式人才的需求也越来越多。因此近几年来,各高职高专院校开始纷纷开设嵌入式专业或方向。但是,各院校在嵌入式专业教学建设的过程中几乎都面临教材难觅的困境。虽然目前市场上的嵌入式开发相关书籍比较多,但几乎都是针对有一定基础的行业内研发人员而编写的,并不完全符合学校的教学要求。学校教学需要一套充分考虑学生现有知识基础和接受度的,明确各门课程教学目标的,便于学校安排课时的嵌入式专业教材。
AI Reading Assistant
Summary and highlights from this book's index; jump to passages in the text
Tags
Support Statistics
¥.00 ·
0times
Text Preview (First 20 pages)
Registered users can read the full content for free
Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.
Page
1
(This page has no text content)
Page
2
目 录 封面 扉页 版权 前言 第1章 嵌入式Linux C语言开发工具 1.1 嵌入式 Linux 下 C 语言概述 1.1.1 C 语言简史 1.1.2 C 语言特点 1.1.3 嵌入式Linux C语言编程环境 1.2 嵌入式 Linux 编辑器 vi 的使用 1.2.1 vi 的基本模式 1.2.2 vi 的基本操作 1.2.3 vi 的使用实例分析 1.3 嵌入式 Linux 编译器 GCC 的使用 1.3.1 GCC 概述 1.3.2 GCC 编译流程分析 1.3.3 GCC 警告提示 1.3.4 GCC 使用库函数 1.3.5 GCC 代码优化 1.4 嵌入式 Linux 调试器 GDB 的使用 1.4.1 GDB 使用实例 1.4.2 设置/删除断点 1.4.3 数据相关命令 1.4.4 调试运行环境相关命令
Page
3
1.4.5 堆栈相关命令 1.5 make 工程管理器 1.5.1 Makefile基本结构 1.5.2 Makefile变量 1.5.3 Makefile规则 1.5.4 make使用 1.6 eclipse 集成开发环境 1.6.1 eclipse 简介 1.6.2 eclipse 相关术语 1.6.3 安装eclipse 集成开发环境(假设宿主机环境为 ubuntu8.10) 1.6.4 eclipse 的使用 小结 思考与练习 第2章 数据 2.1 ANSI C 与 GNU C 2.1.1 ANSI C 简介 2.1.2 GNU C 简介 2.2 基本数据类型 2.2.1 整型家族 2.2.2 实型家族 2.2.3 字符型家族 2.2.4 枚举家族 2.2.5 指针家族 2.3 变量与常量 2.3.1 变量的定义 2.3.2 typedef
Page
4
2.3.3 常量的定义 2.3.4 作用域 2.3.5 链接属性 2.3.6 存储模型 2.4 预处理 2.4.1 预定义 2.4.2 文件包含 2.4.3 条件编译 2.5 需要注意的问题 2.5.1 字长和数据类型 2.5.2 数据对齐 2.5.3 字节序 小结 思考与练习 第3章 数据的输入输出 3.1 数据的输出 3.1.1 字符输出函数 putchar 3.1.2 格式化输出函数printf 3.2 数据的输入 3.2.1 字符输入函数 getchar 3.2.2 格式化输入函数scanf 3.3 数据输入输出综合示例 3.4 字符串输入输出函数 小结 思考与练习 第4章 运算符和表达式 4.1 概述
Page
5
4.2 运算符和表达式 4.2.1 算术运算符和表达式 4.2.2 赋值运算符和表达式 4.2.3 逗号运算符和表达式 4.2.4 位运算符和表达式 4.2.5 关系运算符和表达式 4.2.6 逻辑运算符和表达式 4.2.7 sizeof 操作符 4.2.8 条件运算符 4.2.9 运算符优先级总结 小结 思考与练习 第5章 程序结构和控制语句 5.1 C 语言程序结构 5.2 C 语言控制语句 5.2.1 条件判断语句 5.2.2 循环语句 5.2.3 转向语句 小结 思考与练习 第6章 数组 6.1 一维数组 6.1.1 数组的定义 6.1.2 一维数组的引用 6.1.3 一维数组的初始化 6.1.4 一维数组的内存分配 6.1.5 一维数组程序举例
Page
6
6.2 多维数组 6.2.1 多维数组定义及初始化 6.2.2 二维数组的内存分配 6.2.3 深入理解二维数组 6.2.4 二维数组程序举例 6.3 字符数组 6.4 字符串 6.4.1 字符串的定义 6.4.2 字符串的输入输出 6.4.3 字符串处理函数 小结 思考与练习 第7章 指针 7.1 指针基础 7.1.1 指针变量的定义 7.1.2 指针变量的赋值 7.1.3 指针变量的引用 7.2 指针的运算 7.2.1 指针的算术运算 7.2.2 指针的关系运算 7.2.3 空指针 7.3 指针与数组 7.3.1 指针与一维数组 7.3.2 指针与多维数组 7.4 多级指针 7.4.1 多级指针的定义及引用 7.4.2 多级指针的运算
Page
7
7.5 指针数组 7.5.1 指针数组的定义及初始化 7.5.2 理解指针数组名 7.6 const 与指针 7.7 void 指针 7.8 字符指针 7.8.1 字符串 7.8.2 字符指针数组 小结 思考与练习 第8章 函数 8.1 函数基础 8.1.1 函数定义和声明 8.1.2 函数的调用、参数传递和返回值 8.1.3 函数和数组 8.1.4 main 函数的参数 8.2 指针函数 8.2.1 指针函数的定义和使用 8.2.2 指针函数程序举例 8.3 函数指针 8.3.1 函数指针的声明 8.3.2 定义函数指针类型 8.3.3 函数指针数组 8.3.4 函数指针程序举例 8.4 递归函数 8.4.1 递归函数的定义 8.4.2 函数调用机制说明
Page
8
8.4.3 递归调用的形式 8.4.4 递归的条件 8.5 attribute 机制介绍 小结 思考与练习 第9章 用户自定义数据类型 9.1 结构体 9.1.1 结构体的定义 9.1.2 结构体变量的声明、使用及初始化 9.1.3 结构体数组 9.1.4 结构体指针 9.2 位域 9.2.1 位域的定义 9.2.2 位域变量的说明 9.2.3 位域的使用 9.3 共用体 9.4 枚举 9.4.1 枚举类型的定义 9.4.2 枚举变量的声明和使用 小结 思考与练习 第10章 嵌入式C语言的高级用法 10.1 内存管理 10.2 动态内存的申请和释放 10.2.1 malloc函数 10.2.2 free 函数 10.2.3 关于野指针
Page
9
10.3 堆和栈的区别 10.4 动态内存程序举例 10.5 C 语言和汇编语言的接口 10.5.1 内联汇编的语法 10.5.2 编译器优化介绍 10.5.3 C 语言关键字volatile 10.5.4 “memory”描述符 小结 思考与练习 第11章 嵌入式linux内核常见数据结构 11.1 链表 11.1.1 单向链表 11.1.2 双向链表 11.1.3 循环链表 11.1.4 ARM Linux 中链表使用实例 11.2 树、二叉树、平衡树 11.2.1 树的定义 11.2.2 二叉树 11.2.3 平衡树 11.2.4 ARM Linux 中红黑树使用实例 11.3 哈希表 11.3.1 哈希表的概念及作用 11.3.2 哈希表的构造方法 11.3.3 哈希表的处理冲突方法 11.3.4 ARM Linux 中哈希表使用实例 小结 思考与练习
Page
10
附录 嵌入式Linux C函数快速参考
Page
11
高等院校嵌入式人才培养规划教材 Gaodeng Yuanxiao Qianrushi Rencai Peiyang Guihua Jiaocai 嵌入式Linux C语言程序设计基础教程 C Language Programming of Embedded Linux 华清远见嵌入式学院 冯利美 冯建 主编 人民邮电出版社 北京
Page
12
图书在版编目(CIP)数据 嵌入式Linux C语言程序设计基础教程/华清远见嵌入式学院,冯 利美,冯建主编.--北京:人民邮电出版社,2013.9 高等院校嵌入式人才培养规划教材 ISBN 978-7-115-31693-6 Ⅰ.① 嵌… Ⅱ.① 华…② 冯…③ 冯… Ⅲ.① Linux操作系统 —程序设计—高等学校—教材② C语言—程序设计—高等学校—教 材 Ⅳ.① TP316.89② TP312 中国版本图书馆CIP数据核字(2013)第155410号 内容提要 本书介绍开发工具和 Linux C 语言基础包括嵌入式 Linux C 语 言中的数据、数据的输入和输出、运算符和表达式、程序结构和控制 语句、数组、指针及函数、嵌入式 Linux C 语言高级用法、内核常见 数据结构的解析与应用等,并设置了嵌入式 Linux C 函数参考附录。 本书立足基础,可操作性强,可作为高等院校嵌入式技术专业以 及电子信息类其他专业的教材,也可供嵌入式爱好者自学参考。 ◆主编 华清远见嵌入式学院 冯利美 冯建 责任编辑 王威 责任印制 沈蓉 焦志炜 ◆人民邮电出版社出版发行 北京市崇文区夕照寺街14号 邮编 100061 电子邮件 315@ptpress.com.cn 网址 http://www.ptpress.com.cn 三河市潮河印业有限公司印刷 ◆开本:787×1092 1/16 印张:19.5 2013年9月第1版 字数:501千字 2013年9月河北第1次印刷 定价:49.80元(附光盘)
Page
13
读者服务热线:(010)67170985 印装质量热线: (010)67129223 反盗版热线:(010)67171154
Page
14
前言 随着消费群体对产品要求的日益提高,嵌入式技术在机械器具制 造、电子产品制造、通信、信息服务等行业领域得到了大显身手的机 会,应用日益广泛,相应地企业对嵌入式人才的需求也越来越多。因 此近几年来,各高职高专院校开始纷纷开设嵌入式专业或方向。但 是,各院校在嵌入式专业教学建设的过程中几乎都面临教材难觅的困 境。虽然目前市场上的嵌入式开发相关书籍比较多,但几乎都是针对 有一定基础的行业内研发人员而编写的,并不完全符合学校的教学要 求。学校教学需要一套充分考虑学生现有知识基础和接受度的,明确 各门课程教学目标的,便于学校安排课时的嵌入式专业教材。 针对教材缺乏的问题,我们以多年来在嵌入式工程技术领域内人 才培养、项目研发的经验为基础,汇总了近几年积累的数百家企业对 嵌入式研发相关岗位的真实需求,调研了数十所开设“嵌入式工程技 术”专业的高职院校的课程设置情况、学生特点和教学用书现状。通 过细致的整理和分析,对专业技能和基本知识进行合理划分,2009 年,我们编写了这套高等院校嵌入式人才培养规划教材,包括以下5 本: 《嵌入式技术基础》 《ARM嵌入式体系结构与接口技术Cortex-A8版》 《嵌入式Linux操作系统》 《嵌入式Linux C语言开发》 《嵌入式应用程序设计》
Page
15
经过4年,嵌入式行业发生了巨大的变化,产品升级换代,而高校 中的嵌入式专业也日趋成熟,首批教材有些已无法满足新的需要。所 以本次对原有教材进行修订和扩充。 本书作为嵌入式专业的C语言教材。全书共11章,第1章介绍了嵌 入式Linux下常用的C语言开发工具,为后面的学习打下基础。第2章~ 第5章讲解了嵌入式Linux C语言中的基础知识。包括嵌入式Linux C语 言中的数据、数据的输入和输出、运算符和表达式、程序结构和控制 语句。第6章到主要讲解了嵌入式Linux C语言中的数组,包括一维数 组、多维数组、字符数组和字符串等。第7章主要讲解了嵌入式Linux C语言中的指针。第8章主要讲解了嵌入式Linux C语言的函数。第9章 主要介绍了嵌入式Linux C语言中用户自定义的数据类型。第10章介绍 了嵌入式Linux C语言的高级用法。第11章介绍了嵌入式Linux内核中 常见的数据结构。 本书由冯利美主编。本书的完成需要感谢华清远见嵌入式学院, 教材内容参考了学院与嵌入式企业需求无缝对接的、科学的专业人才 培养体系。同时,嵌入式学院从业或执教多年的行业专家团队也对教 材的编写工作做出了贡献,孙天泽、刘洪涛、曾宏安、穆煜、赵苍 明、季久峰、贾燕枫、关晓强等在书稿的编写过程中认真阅读了所有 章节,提供了大量在实际教学中积累的重要素材,对教材结构、内容 提出了中肯的建议,并在后期审校工作中提供了很多帮助,在此表示 衷心的感谢。 本书所有源代码、PPT课件、教学素材等辅助教学资料,请到人民 邮电出版社教学服务与资源网(www.ptpedu.com.cn)免费下载。 由于作者水平所限,书中不妥之处在所难免,恳请读者批评指 正。对于本书的批评和建议,可以发到www.embedu.org技术论坛。 编者 2013年6月
Page
16
第1章 嵌入式Linux C语言 开发工具 任何应用程序的开发都离不开编辑器、编译器及调试器,嵌入式 Linux的C语言开发也一样,它也有一套优秀的编辑、编译及调试工 具。 掌握这些工具的使用是至关重要的,它直接影响到程序开发的效 率。希望读者通过自己的实践,熟练掌握这些工具的使用。通过本章 的学习,读者将会掌握如下内容: C 语言产生的历史背景 嵌入式 Linux 下 C 语言的开发环境 嵌入式 Linux 下的编辑器 vi 嵌入式 Linux 下的编译器 GCC 嵌入式 Linux 下的调试器 GDB 嵌入式 Linux 下的工程管理器 make eclipse 集成开发环境 1.1 嵌入式 Linux 下 C 语言概述 在嵌入式系统中,应用程序的主体是在宿主机中开发完成的。就 嵌入式Linux而言,此过程则一般是在安装有Linux的宿主机中完成 的。
Page
17
本章中介绍的是嵌入式Linux下C语言的开发工具,用户在开发时 往往是在Linux宿主机中对程序进行调试,然后再进行交叉编译。 1.1.1 C 语言简史 C语言于20世纪70年代诞生于美国的贝尔实验室。在此之前,人们 编写系统软件主要使用汇编语言。汇编语言编写的程序依赖于计算机 硬件,其可读性和可移植性都比较差。而高级语言的可读性和可移植 性虽然较汇编语言好,但一般又不具备低级语言能够直观地对硬件实 现控制和操作而且执行速度快等特点。 在这种情况下,人们迫切需要一种既具有一般高级语言特性,又 具有低级语言特性的语言,于是C语言就应运而生了。由于C语言既具 有高级语言的特点又具有低级语言的特点,因此迅速普及,成为当今 最有发展前途的计算机高级语言之一。C语言既可以用来编写系统软 件,也可以用来编写应用软件。现在,C语言已经被广泛地应用在除计 算机行业外的机械、建筑、电子等各个行业中。 C语言的发展历程如下。 ① C 语言最初是美国贝尔实验室的 D.M.Ritchie 在 B 语言的基 础上设计出来的,此时的 C 语言只是为了描述和实现UNIX操作系统的 一种工作语言。在一段时间里,C语言还只在贝尔实验室内部使用。 ② 1975年,UNIX 第 6 版公布后,C 语言突出的优点引起人们的 普遍注意。 ③ 1977年出现了可移植的 C 语言。 ④ 1978年UNIX 第 7 版的 C 语言成为后来被广泛使用的 C 语言 版本的基础,被称为标准 C语言。 ⑤ 1983年,美国国家标准协会(ANSI)根据 C 语言问世以来的 各种版本,对 C 语言进行发展和扩充,并制定了新的标准,称为
Page
18
ANSI C。 ⑥ 1990年,国际标准化组织(ISO)制定了 ISO C 标准,目前流 行的 C 语言编译系统都是以它为标准的。 1.1.2 C 语言特点 C语言兼有汇编语言和高级语言的优点,既适合于开发系统软件, 又适合于编写应用程序,被广泛应用于事务处理、科学计算、工业控 制、数据库技术等领域。 C 语言之所以能存在和发展,并具有强大的生命力,都要归功于 其鲜明的特点。这些特点如下。 1.C语言是结构化的语言 C语言采用代码及数据分隔的方式,使程序的各个部分除了必要的 信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使 用、维护以及调试。 C语言是以函数形式提供给用户的,这些函数可被方便地调用,并 具有多种循环语句、条件语句控制程序流向,从而使程序完全结构 化。 2.C语言是模块化的语言 C语言主要用于编写系统软件和应用软件。一个系统软件的开发需 要很多人经过几年的时间才能完成。一般来说,一个较大的系统程序 往往被分为若干个模块,每一个模块用来实现特定的功能。 在C语言中,用函数作为程序的模块单位,便于实现程序的模块 化。在程序设计时,将一些常用的功能模块编写成函数,放在函数库 中供其他函数调用。模块化的特点可以大大减少重复编程。程序设计 时,只要善于利用函数,就可减少劳动量、提高编程效率。 3.程序可移植性好
Page
19
C语言程序便于移植。目前C语言在许多计算机上的实现大都是由C 语言编译移植得到的,不同计算机上的编译程序大约有80%的代码是公 共的。程序不做任何修改就可用于各种型号的计算机和各种操作系 统。因此,特别适合在嵌入式开发中使用。 4.C语言运算符丰富、代码效率高 C语言共有34种运算符,使用各种运算符可以实现在其他高级语言 中难以实现的运算。在代码质量上,C语言可与汇编语言媲美,其代码 效率仅比用汇编语言编写的程序低10%~20%。 1.1.3 嵌入式Linux C语言编程环境 嵌入式 Linux C 语言程序设计与在其他环境中的 C 程序设计很 类似,也涉及编辑器、编译链接器、调试器及项目管理工具的使用。 现在我们先对这4种工具进行简单介绍,后面会一一进行讲解。 1.编辑器 嵌入式Linux下的编辑器就如Windows下的Word、记事本等一样, 完成对所录入字符的编辑功能,最常用的编辑器有vi(vim)和 Emacs,它们功能强大,使用方便,本书重点介绍vi。 2.编译链接器 编译过程包括词法、语法和语义的分析、中间代码的生成和优 化、符号表的管理和出错处理等。在嵌入式Linux中,最常用的编译器 是GCC编译器。它是GNU推出的功能强大、性能优越的多平台编译器, 其执行效率与一般的编译器相比平均效率要高20%~30%。 3.调试器 调试器可以方便程序员在程序运行时进行源代码级的调试,但不 是代码执行的必备工具。在程序开发的过程当中,调试所消耗的时间 远远大于编写代码的时间。因此,有一个功能强大、使用方便的调试
Page
20
器是必不可少的。GDB可以方便地设置断点、单步跟踪等,足以满足开 发人员的需要。 4.项目管理器 嵌入式 Linux 中的项目管理器“make”类似于 Windows 中 Visual C++里的“工程”管理,它是一种控制编译或者重复编译代码 的工具。另外,它还能自动管理软件编译的内容、方式和时机,使程 序员能够把精力集中在代码的编写上而不是在源代码的组织上。 1.2 嵌入式 Linux 编辑器 vi 的 使用 vi是Linux系统的第一个全屏幕交互式编辑工具。它从诞生至今一 直得到广大用户的青睐,历经数十年后仍然是人们主要使用的文本编 辑工具,足见其生命力之强,其强大的编辑功能可以同任何一个最新 的编辑器相媲美。 虽然用惯了Windows中的Word等编辑器的读者在刚刚接触vi时或多 或少会有些不适应,但使用过一段时间后,就能感受到它的方便与快 捷。 Linux系统提供了一个完整的编辑器家族系列,如Ed、Ex、vi、 Emacs等,按功能它们可以分为两大类:行编辑器(Ed、Ex)和全屏幕 编辑器(vi、Emacs)。行编辑器每次只能对一行进行操作,使用起来 很不方便。而全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文 件直接显示在屏幕上,从而克服了行编辑的那种不直观的操作方式, 便于用户学习和使用,具有强大的功能。
Loading comments...
Reply to Comment
Edit Comment