嵌入式LinuxC语言程序设计基础教程(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-04 20:39:20

点击下载

作者:华清远见嵌入式学院冯利美,冯建(主编)

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

嵌入式LinuxC语言程序设计基础教程

嵌入式LinuxC语言程序设计基础教程试读:

前言

随着消费群体对产品要求的日益提高,嵌入式技术在机械器具制造、电子产品制造、通信、信息服务等行业领域得到了大显身手的机会,应用日益广泛,相应地企业对嵌入式人才的需求也越来越多。因此近几年来,各高职高专院校开始纷纷开设嵌入式专业或方向。但是,各院校在嵌入式专业教学建设的过程中几乎都面临教材难觅的困境。虽然目前市场上的嵌入式开发相关书籍比较多,但几乎都是针对有一定基础的行业内研发人员而编写的,并不完全符合学校的教学要求。学校教学需要一套充分考虑学生现有知识基础和接受度的,明确各门课程教学目标的,便于学校安排课时的嵌入式专业教材。

针对教材缺乏的问题,我们以多年来在嵌入式工程技术领域内人才培养、项目研发的经验为基础,汇总了近几年积累的数百家企业对嵌入式研发相关岗位的真实需求,调研了数十所开设“嵌入式工程技术”专业的高职院校的课程设置情况、学生特点和教学用书现状。通过细致的整理和分析,对专业技能和基本知识进行合理划分,2009年,我们编写了这套高等院校嵌入式人才培养规划教材,包括以下5本:《嵌入式技术基础》《ARM嵌入式体系结构与接口技术Cortex-A8版》《嵌入式Linux操作系统》《嵌入式Linux C语言开发》《嵌入式应用程序设计》

经过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月▶▶第1章嵌入式Linux C语言开发工具

任何应用程序的开发都离不开编辑器、编译器及调试器,嵌入式Linux的C语言开发也一样,它也有一套优秀的编辑、编译及调试工具。

掌握这些工具的使用是至关重要的,它直接影响到程序开发的效率。希望读者通过自己的实践,熟练掌握这些工具的使用。通过本章的学习,读者将会掌握如下内容:

C 语言产生的历史背景

嵌入式 Linux 下 C 语言的开发环境

嵌入式 Linux 下的编辑器 vi

嵌入式 Linux 下的编译器 GCC

嵌入式 Linux 下的调试器 GDB

嵌入式 Linux 下的工程管理器 make

eclipse 集成开发环境1.1 嵌入式 Linux 下 C 语言概述

在嵌入式系统中,应用程序的主体是在宿主机中开发完成的。就嵌入式Linux而言,此过程则一般是在安装有Linux的宿主机中完成的。

本章中介绍的是嵌入式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 语言进行发展和扩充,并制定了新的标准,称为 ANSI C。

⑥ 1990年,国际标准化组织(ISO)制定了 ISO C 标准,目前流行的 C 语言编译系统都是以它为标准的。1.1.2 C 语言特点

C语言兼有汇编语言和高级语言的优点,既适合于开发系统软件,又适合于编写应用程序,被广泛应用于事务处理、科学计算、工业控制、数据库技术等领域。

C 语言之所以能存在和发展,并具有强大的生命力,都要归功于其鲜明的特点。这些特点如下。

1.C语言是结构化的语言

C语言采用代码及数据分隔的方式,使程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。

C语言是以函数形式提供给用户的,这些函数可被方便地调用,并具有多种循环语句、条件语句控制程序流向,从而使程序完全结构化。

2.C语言是模块化的语言

C语言主要用于编写系统软件和应用软件。一个系统软件的开发需要很多人经过几年的时间才能完成。一般来说,一个较大的系统程序往往被分为若干个模块,每一个模块用来实现特定的功能。

在C语言中,用函数作为程序的模块单位,便于实现程序的模块化。在程序设计时,将一些常用的功能模块编写成函数,放在函数库中供其他函数调用。模块化的特点可以大大减少重复编程。程序设计时,只要善于利用函数,就可减少劳动量、提高编程效率。

3.程序可移植性好

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.调试器

调试器可以方便程序员在程序运行时进行源代码级的调试,但不是代码执行的必备工具。在程序开发的过程当中,调试所消耗的时间远远大于编写代码的时间。因此,有一个功能强大、使用方便的调试器是必不可少的。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)。行编辑器每次只能对一行进行操作,使用起来很不方便。而全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上,从而克服了行编辑的那种不直观的操作方式,便于用户学习和使用,具有强大的功能。1.2.1 vi 的基本模式

vi 编辑器具有 3 种工作模式,分别是命令行模式(command mode)、插入模式(insert mode)和底行模式(last line mode),各模式的功能区分如下。

1.命令行模式

在命令行模式(command mode)下用户可以输入命令来控制屏幕光标的移动,删除字符、单词或行,移动复制某区段,也可以进入到底行模式或者插入模式下。

2.插入模式

用户只有在插入模式(insert mode)下才可以进行字符输入,用户按[Esc]键可回到命令行模式下。

3.底行模式

在底行模式(last line mode)下,用户可以将文件保存或退出 vi,也可以设置编辑环境,如寻找字符串、显示行号等。这一模式下的命令都是以“:”开始。

不过在一般使用时,人们通常把vi简化成两个模式,即将底行模式也归入命令行模式中。1.2.2 vi 的基本操作

1.进入与离开vi

进入vi可以直接在系统提示符下键入“vi<文档名称>”,vi可以自动载入所要编辑的文档或是创建一个新的文档。如在 shell 中键入“vi hello.c”(新建文档)即可进入 vi 画面。如图1-1所示。图1-1 在 vi 中打开/新建文档

进入vi后,屏幕最左边会出现波浪符号,凡是有该符号就代表该行目前是空的。此时进入的是命令行模式。

要离开 vi 可以在底行模式下键入“:q”(不保存离开),而“:wq”(保存离开)则是存档后再离开(注意冒号)。如图1-2所示。图1-2 在 vi 中退出文档

2.vi中3种模式的切换

在vi的使用中,3种模式的切换是最为常用的。在处理的过程中,读者要时刻注意屏幕左下方的提示。在插入模式下,左下方会有“插入”字样,而在命令行或底行模式下则无提示。(1)命令行模式、底行模式转为插入模式

在命令行模式或底行模式下转入到插入模式有3种方法,如表1-1所示。表1-1 命令行模式、底行模式转为插入模式

在这里,最常用的是“i”,在转入插入模式后如图1-3所示。(2)插入模式转为命令行模式、底行模式

从插入模式转为命令行模式、底行模式比较简单,只需使用[Esc]键即可。(3)命令行模式与底行模式转换

命令行模式与底行模式间的转换不需要其他特别的命令,只需要直接键入相应模式中的命令键即可。图1-3 命令模式转入插入模式

3.vi的删除、修改与复制

在vi中进行删除、修改都可以在插入模式下使用键盘上的方向键及Delete键,另外,vi还提供了一系列的操作指令,用以大大简化操作。

这些指令记忆起来比较复杂,希望读者能够配合操作进行实验。以下命令都是在命令行模式下使用的。

表1-2所示为vi的删除(/剪切)、修改与复制命令。表1-2 vi的剪切、修改与复制命令

4.vi的光标移动

由于许多编辑功能都是通过光标的定位来实现的,因此,掌握vi中光标移动的方法很重要。虽然使用方向键也可以实现 vi 的操作,但 vi 的指令可以实现复杂的光标移动,只要熟悉以后都非常方便,希望读者能切实掌握。

表1-3所示为vi中的光标移动指令,这些指令都是在命令行模式下使用的。表1-3 vi中光标移动的指令续表

5.vi的查找与替换

vi中的查找与替换也非常简单,其操作有些类似在Telnet中的使用。其中,查找的命令在命令行模式下,而替换的命令则在底行模式下(以“:”开头),其命令如表1-4所示。表1-4 vi的查找与替换指令

关于替换范围,有很多种写法,其中:

百分号(%)表示所有行;

点(.)表示当前行;

美元符号($)表示最末行。

举例如下。

:10,20 s/str1/str2/ 表示用字符串 str2 替换第 10 行到第 20 行中首次出现的字符串 str1。

:2,$-5/str1/str2/g 表示用字符串 str2 替换当前行后两行直到全文的倒数第五行所有出现的字符串 str1。

:s/str1/str2/ 表示用字符串 str2 替换行中首次出现的字符串 str1。

:s/str1/str2/g 表示用字符串 str2 替换行中所有出现的字符串 str1。

:.,$ s/str1/str2/g 表示用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1。

:1,$ s/str1/str2/g 表示用字符串 str2 替换正文中所有出现的字符串 str1。

:%s/str1/str2/g 表示用字符串 str2 替换正文中所有出现的字符串 str1。

类似,在进行剪切复制和粘贴操作时,也可以带上范围,即按块操作。

range y 块复制。

举例如下。

:10, 20y 表示复制第 10 行到第 20 行。

:.,$y 表示复制当前行到文章最后一行。

range d 块删除。

举例如下。

:10, 20d 表示剪切第 10 行到第 20 行。

:.,$d 表示剪切当前行到文章最后一行。

6.vi的文件操作指令

vi 中的文件操作指令都是在底行模式下进行的,所有的指令都是以“:”开头,其命令如表1-5所示。表1-5 vi的文件操作指令1.2.3 vi 的使用实例分析

本小节给出了一个vi使用的完整实例,通过这个实例,读者一方面可以熟悉vi的使用流程,另一方面也可以熟悉Linux的操作,希望读者能够先自己思考每一步的操作,再看后面的实例解析答案。

1.vi使用实例内容

① 在“/root”目录下建一个名为 vi 的目录。

② 进入 vi 目录。

③ 将文件“/etc/inittab”复制到当前目录下。

④ 使用 vi 编辑当前目录下的 inittab。inittab 是/etc 下的系统配置文件。Linux 启动时会读取其内容。里面定义了默认的运行级别和要执行的程序。

⑤ 将光标移到该行。

⑥ 复制该行内容。

⑦ 将光标移到最后一行行首。

⑧ 粘贴复制行的内容。

⑨ 撤销第(8)步的动作。

⑩ 将光标移动到最后一行的行尾。粘贴复制行的内容。光标移到“si::sysinit:/etc/rc.d/rc.sysinit”。删除该行。存盘但不退出。将光标移到首行。插入模式下输入“Hello,this is vi world!”。返回命令行模式。向下查找字符串“0:wait”。再向上查找字符串“halt”。强制退出vi,不存盘。

2.vi使用实例解析

在该实例中,每一步的使用命令如下所示。

① mkdir /root/vi

② cd /root/vi

③ cp /etc/inittab ./

④ vi ./inittab

⑤ 17(命令行模式)

⑥ yy

⑦ G

⑧ p

⑨ u

⑩ $p21Gdd:w(底行模式)1Gi 并输入“Hello,this is vi world!”(插入模式)Esc/0:wait(命令行模式)?halt:q!(底行模式)1.3 嵌入式 Linux 编译器 GCC 的使用1.3.1 GCC 概述

作为自由软件的旗舰项目,Richard Stallman 在刚开始编写 GCC 的时候,只是把它当作一个C 程序的编译器,GCC 的意思也只是 GNU C Compiler 而已。

经过多年的发展,GCC除了能支持C语言,目前还支持Ada语言、C++语言、Java语言、Objective C 语言、PASCAL 语言、

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载