您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 嵌入式Linux开发基础
Linux下的C编程熟悉Linux系统下的开发环境熟悉vi的基本操作熟悉gcc编译器的基本原理熟练使用gcc编译器的常用选项熟悉Makefile基本原理及语法规范熟练使用autoconf和automake来生成MakefileC语言的特点C语言的硬件无关性和可移植性,成为最广泛使用的计算机语言C语言把高级语言的基本结构与低级语言的实用性结合。C语言是结构化的语言。C语言功能齐全。各种数据类型,图形,计算,逻辑判断。C语言可移植性强。适合多种操作系统Linux下的C语言编程环境概述编辑器:Linux中最常用的编辑器有vi(vim)和Emacs。编辑源程序编译链接器:编译过程是非常复杂的,包括词法、语法和语义的分析、中间代码的生成和优化、符号表的管理和出错处理等。在Linux中最常用的编译器是gcc。它是GNU推出的功能强大、性能优越的多平台编译器。调试器:并不是代码执行的必备工具,而是专为程序员方便调试程序而用的。gdb是绝大多数linux开发人员所使用调试器,可以方便地设置断点、但不跟踪。项目管理工具:Liunx中项目管理器make有些类似windows中visualC++里的工程,是一种控制编译或重复编译软件的工具,另外,他还能自动管理软件编译的内容、方式和时机,使程序员能够把精力集中在代码的编写而不是在源代码的组织上。源代码*.c预处理器头文件*.h编译器汇编处理目标代码*.o链接可执行文件引导代码库函数vi编辑器gcc编译器计算机可执行的进入vi(vim)(编辑器)Linux系统提供了一个完整的编辑器家族系列,如Ed、Ex、vi和Emacs等。按功能它们分为两大类:行编辑器(Ed、Ex)和全屏幕编辑器(vi、Emacs)。vi是Linux系统的第一个全屏幕交互式编辑程序,是人们主要使用的文本编辑工具。具有强大的功能。vi/vim的模式3种工作模式命令行模式(编辑模式)插入模式底行模式vi编辑器编辑(指令)模式:vi在初始启动后首先进入,这时用户可以利用一些预先定义的按键来移动光标、删除文字、复制或粘贴文字等。插入模式:当用户在编辑模式下键入i,a,o等命令之后,可进入插入模式;按Esc之后,从插入模式切换到编辑模式。末行模式:在编辑模式下输入冒号:,就为末行模式。用户就可以键入一些命令。这些命令可用来保存文件、读取文件内容Vi的基本流程进入vi,首先进入命令行模式指令(编辑)模式(commandmode)文本输入模式(InputMode)底行模式(lastlinemode)ESC返回指令模式aio输入模式指令错误返回:进底行模式vi/vim编辑器通过在Linux文字模式下键入vi文件名例如:#vihello.c进入到vi编辑器插入模式A在光标所在行的末尾输入正文a在光标右侧输入正文I在光标所在行的开头输入正文i在光标左侧输入正文O在光标所在行的上一行增添新行o在光标所在行的下一行增添新行进入插入模式后,屏幕下端显示---insert---输入任何字符Esc退出插入模式编辑(指令)模式-移动光标G移动光标到最后一行nG移动光标到第n行0数字0,左移光标,到本行的开头$右移光标,到本行的末尾nEnter光标下移n行k、j、h、l功能分别等同于上、下、左、右箭头键Ctrl+b后翻页ctrl+f前翻页Ctrl+u后翻半页,ctrl+d前翻半页编辑模式-替换和删除将光标定位于文件内指定位置后,可以用其他字符来替换光标所指向的字符,或从当前光标位置删除一个或多个字符。rc用c替换光标所指向的当前字符nrc用c替换光标所指向的前n个字符x删除光标所指向的当前字符nx删除光标所指向的前n个字符dw删除光标右侧的字ndw删除光标右侧的n个字db删除光标左侧的字ndb删除光标左侧的n个字dd删除光标所在行,并去除空隙ndd删除n行内容,并去除空隙编辑模式-粘贴和复制yy复制当前行到内存缓冲区nyy复制n行内容到内存缓冲区p小写字母p,将缓冲区的内容粘贴到光标的后面P大写字母P,将缓冲区的内容粘贴到光标的前面u恢复前一个动作。编辑模式-搜索字符串/str1正向搜索字符串str1n继续搜索,找出str1字符串下次出现的位置?str2反向搜索字符串str2无论搜索方向如何,当到达文件末尾或开头时,搜索工作会循环到文件的另一端并继续执行末行模式–文件操作:q在未作修改的情况下退出:q!放弃所有修改,退出编辑程序:w将编辑的内容写入原始文件,用来保存编辑的中间结果:w!强行保存:wq将编辑的内容写入原始文件并退出编辑程序:wfile将编辑的内容写入file文件,保持原有文件的内容不变:efile编辑新文件file代替原有内容:ffile将当前文件重命名为file末行模式-选项设置:setoption设置选项option常见的功能选项包括:autoindent设置该选项,则正文自动缩进ignorecase设置该选项,则忽略规则表达式中大小写字母的区别number设置该选项,则显示正文行号nonumber不显示行号ruler设置该选项,则在屏幕底部显示光标所在行、列的位置tabstop设置按Tab键跳过的空格数。例如:settabstop=n,n默认值为8用vi编辑一个c程序,hello.c#includestdio.hintmain(){printf(“Hello!Thisisourembbedworld!\n”);printf(“Thisismytestfile!\n”);printf(“Thisismytestfile!\n”);return0;}用vi编辑文件,上机练习源代码*.c预处理器头文件*.h编译器汇编处理目标代码*.o链接可执行文件引导代码库函数vi编辑器gcc编译器计算机可执行的gcc编译器GNU符合ANSIC标准的编译系统,编译C,C++,ObjectCJavaPascalAdagcc也是一个交叉平台编译器,在当前cpu平台上为多种不同体系结构的硬件平台开发软件。适合嵌入式领域的开发编译。gcc编译器—支持编译元文件的后缀.cC源程序.C/.cc/.cxxC++源程序.mObjectC源程序.i经过预处理的C源程序.ii经过预处理的C++源程序.s/.S汇编语言源程序.h预处理文件(头文件).o目标文件.a/.so编译后的库文件gcc编译器—gcc编译流程编译器的gcc的编译流程分为4个步骤预处理:pre-processing将.h文件插入到源文件中.i编译:compiling检查代码的规范性,语法,检查无误后,代码翻译成汇编语言.s汇编:assembing.s文件转换成目标代码.o链接:Linking把函数库链接到文件中生成可执行文件gcc一般的格式为gcc[选项]文件名[选项][目标文件]其中目标文件可缺省,默认生成的可执行文件为:.outgcc编译器—gcc编译流程gcc–Ehello.c–ohello.i预编译(头文件包含进来)gcc–Shello.i–ohello.s编译(成为汇编语言)gcc–chello.s–ohello.o汇编(二进制代码)gcchello.o–ohello链接(库函数)gcchellol.c-I/root/workplace/gcc/-ohello1gcchello_sq.c-L/root/workplace/gcc/lib-lsunq–ohello_sq预编译编译汇编链接出错gcc编译选项分析(1)总体选项-c只编译不链接,生成目标文件.o-S只编译不汇编,生成汇编代码.s-E只进行与编译,不做其它处理.i-g在可执行程序中包含标准调试信息-ofile把输出文件输出到file里-Idir在头文件的搜索路径表中添加dir目录-Ldir在库文件的搜索路径表中添加dir目录-llibrary连接名为library的库文件gcc编译选项分析(2)告警和出错选项-ansi支持符合ANSI标准的C-pedantic允许发出ANSI所列的全部警告信息-pedanticerror允许发出ANSI的全部错误信息-w关闭所有警告-Wall允许发出gcc提供的所有有用的警告-werror把所有警告信息转化为错误信息,并在告警发生时终止编译过程-On优化选项控制优化代码生成编译LinuxC程序viscore.c程序运行文件分割分割成3个文件多个文件编译包含.hmake工程管理软件make是一种代码维护工具.在大中型项目中,他将根据程序各个模块的更新情况,自动的维护和生成目标.能很好的做到”不多”,”不重””不漏”.不多:他只更新那些需要更新的文件不重:是指当make对某个文件进行更新时,即使有很多文件过时,他也将只更新一次,当然,这一次就足够了不漏:是指他不会漏下任何应该更新的文件.make工程管理软件make是自动编译管理器,“自动”是指它能根据时间戳自动发现更新过的文件而减少编译的工作量.通过读入Makefile文件的内容来执行大量的编译工作.用户只需编写一次简单的编译语句就可以了。几乎所有Linux的项目编程均会涉及它。Makefile基本结构Makefile是Make读入的唯一配置文,Make工具最主要也是最基本的功能就是通过Makefile文件来描述源程序之间的相互关系并自动维护编译工作。Makefile文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。makefile的结构基本格式:target:dependencyfilescommandtarget:需要由make工具创建的目标体,通常是目标文件或可执行文件;dependecyfiles:要创建目标体所依赖的文件;command:创建每个目标体需要运行的命令。例:有两个文件hello.c和hello.h,创建的目标体为hello.o,执行的命令为gcc编译指令:gcc–chello.c,那么,对应的makefile可以写为:注意:command前必须有“Tab”符使用make的格式为:maketarget,这样make就会自动读入Makefile并执行相应的target的command语句,并会找到相应的依赖文件。分割成3个文件多个文件编译包含.h实际中使用makefile往往包含很多的文件和命令。sunq:kang.oyul.ogcckang.oyul.o–osunqkang.o:kang.ckang.hhead.hgcc–Wall–O–g–ckang.c–okang.oyul.o:bar.chead.hgcc–Wall–O–g–cbar.c–oyul.omakefile变量变量是Makefile中定义的名字,用来代替一个文本字符串。该文本字符串为该变量的值文本可以代替目标体,依赖文件,命令和Makefile中的其他部分。变量的定义递归展开式VAR=var简单扩展式VAR:=varMake中变量的使用$(VAR)OBJS=kang.oyul.oCC=gccCFLAGS=-Wall–O–gsunq:$(OBJS)$(CC)$(OBJS)–osunqkang.o:kang.ckang.hhead.h$(CC)$(CFLAGS)-ckang.c–okang.oyul.o:bar.chead.h$(CC)$(CFLAGS)–cbar.c–oyul.osunq:kang.oyul.ogcckang.oyul.o–osunqkang.o:kang.ckang.hhead.hgcc–Wall–O–g–ckang.c–okang.oyul.o:bar.chead.hgcc–Wall–O–g–cbar.c–oyul.omakefile变量用户自定义变量:用户自己定义的OBJS预定义变量:常见编译器,汇编器及其编译选项自动变量:代表编译语句中出现的目标文件和依赖文件,具有本地含义环境
本文标题:嵌入式Linux开发基础
链接地址:https://www.777doc.com/doc-3324568 .html