嵌入式开发精品课件_第1页
嵌入式开发精品课件_第2页
嵌入式开发精品课件_第3页
嵌入式开发精品课件_第4页
嵌入式开发精品课件_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式开发第1页,共35页,2022年,5月20日,3点8分,星期三3.1 开发环境和常用开发工具第2页,共35页,2022年,5月20日,3点8分,星期三VI 简介Unix 下的全屏幕可视化编辑器由于其源代码不可获得,衍生了许多克隆版本nvi、elvis、vile、VIM.第3页,共35页,2022年,5月20日,3点8分,星期三vi的操作模式图2-2 vi编辑器的三种工作模式第4页,共35页,2022年,5月20日,3点8分,星期三vi的常用命令命令说明功能键h向左移一个字符 I向右移一个字符 J向上移一个字符 k向下移一个字符 0移至该行之首 Home $移至该行之末 End 第5页,共

2、35页,2022年,5月20日,3点8分,星期三H 移至窗口的第一行 M 移至窗口的中间那行 L 移至窗口的最后一行 G 移至该文件的最后一行 nG 移至该文件的第 n 行 Ctrl+f 向后翻一页 PageDown Ctrl+b 向前翻一页 PageUp 移至该行的第一个非空白字符处 第6页,共35页,2022年,5月20日,3点8分,星期三命令 说明 功能键 x 删除光标后的字符 Delete X 删除光标前的字符 dd 删除光标所在的行 ndd 删除包括光标所在行的n行文本 r 修改光标所在字符 第7页,共35页,2022年,5月20日,3点8分,星期三R 进入替换状态,直到按Esc回到

3、命令模式为止 Insert s 删除光标所在字符,并进入输入模式 S 删除光标所在的行,并进入输入模式 u 恢复刚才被修改的文本 U 恢复光标所在行的所有修改 . 重复上一次命令的操作 第8页,共35页,2022年,5月20日,3点8分,星期三命令 说明 Y 复制当前行至编辑缓冲区 nY 复制当前行开始的n行至编辑缓冲区 p 将编辑缓冲区的内容粘贴到光标后的一行 P 将编辑缓冲区的内容粘贴到光标前的一行 a 从光标所在位置后面开始新增文本 第9页,共35页,2022年,5月20日,3点8分,星期三命令 命令说明A 从光标所在行最后面的地方开始新增文本 i 从光标所在位置前面开始插入文本 I 从

4、光标所在列的第一个非空白字元前面开始插入文本 o 在光标所在列下新增一行并进入输入模式 O 在光标所在列上方新增一行并进入输入模式 第10页,共35页,2022年,5月20日,3点8分,星期三命令 说明 :q 结束编辑 :q! 强制离开vi,放弃存盘 :w 存盘 :w filename 将编辑内容保存为名为filename的文件 :wq 存盘并退出 第11页,共35页,2022年,5月20日,3点8分,星期三GCC功能:高级语言(.c、.cpp、.F)汇编语言(.s)用户界面,驱动各工具的执行组成:一组可执行程序 + 一组库cpp、gcc、g+、g77 cpp0、cc1、cc1plus、f77

5、1 libgcc.a、crtbegin.o、crtend.o 支持多种语言和目标机第12页,共35页,2022年,5月20日,3点8分,星期三GNU工具链的组成GCCGNU Compiler CollectionBinutilsGNU binary utilitiesGlibcGNU C Library软件开发的基本工具集合第13页,共35页,2022年,5月20日,3点8分,星期三Binutils功能:汇编语言(.s)目标文件可执行程序查看二进制文件信息组成:一组可执行程序as、ldobjdump、readelf、ar 支持多种目标机第14页,共35页,2022年,5月20日,3点8分,星期

6、三Glibc功能:提供语言和操作系统的标准库函数组成:若干可执行程序 + 大量库ldd、iconv、localeISO C、POSIX、UNIX、GNU绝大部分与目标机无关第15页,共35页,2022年,5月20日,3点8分,星期三编译工具链的基本工作流程Pre-processor(cpp / Gcc -E)Compiler(cc1 / Gcc -S)Assembler(as / Gcc -c)Linker(ld)hello.c(text)hello.i(text)hello.s(text)hello.o(binary)hello(binary)printf.o(binary)一个“hello

7、 world”程序的演变历程第16页,共35页,2022年,5月20日,3点8分,星期三gcc最基本的用法是gcc options filenames基本参数说明: -E:只进行预处理 -S:只进行编译;产生汇编代码 -c:只编译、汇编,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件-ooutput_filename:确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out -v:打印程序的编译过程,以及编译器的版本 -g:产生符号调试工具

8、(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,必须加入这个选项 -o:对程序进行优化编译、连接 -O2:比-O更好的优化-Dmacro或-Dmacro=defn其作用类似于源程序里的#define。 第17页,共35页,2022年,5月20日,3点8分,星期三-Idirname:将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数.C程序中的头文件包含两种情况 A)#include B)#include “myinc.h” 其中,A类使用尖括号(),B类使用双引号(“ ”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)

9、中搜寻相应的文件,而对于B类,cpp在当前目录中搜寻头文件,这个选项的作用是告诉cpp,如果在当前目录中没有找到需要的文件,就到指定的dirname目录中去寻找。在程序设计中,如果我们需要的这种包含文件分别分布在不同的目录中,就需要逐个使用-I选项给出搜索路径 -Ldirname:将dirname所指出的目录加入到程序函数档案库文件的目录列表中,是在连接过程中使用的参数。在预设状态下,连接程序ld在系统的预设路径中(如/usr/lib)寻找所需要的档案库文件,这个选项告诉连接程序,首先到-L指定的目录中去寻找,然后到系统预设路径中寻找,如果函数库存放在多个目录下,就需要依次使用这个选项,给出相

10、应的存放目录 -lname:在连接时,装载名字为“libname.a”的函数库,该函数库位于系统预设的目录或者由-L选项确定的目录下。例如,-lm表示连接名为“libm.a”的数学函数库第18页,共35页,2022年,5月20日,3点8分,星期三gcc 常用方式gcc 选项 源文件 目标文件$gcc hello.c o hello$gcc c hello.cpp o hello.o$gcc myapp.c L /home/silver/lib I /home/silver/include lnew o myapp第19页,共35页,2022年,5月20日,3点8分,星期三GDB调试器第20页,

11、共35页,2022年,5月20日,3点8分,星期三还可以用下面的方式来运行gdb:gdb filename其中,filename是要调试的可执行文件。用这种方式运行gdb可以直接指定想要调试的程序。这和启动gdb后执行file filename命令效果完全一样。也可以用gdb去检查一个因程序异常终止而产生的core文件,或者与一个正在运行的程序相连。 第21页,共35页,2022年,5月20日,3点8分,星期三gdb支持很多的命令且能实现不同的功能。这些命令从简单的文件装入到允许你检查所调用的堆栈内容的复杂命令, 下面列出了在使用gdb 调试时会用到的一些命令。1)file命令:装入想要调试的

12、可执行文件。 2)cd命令:改变工作目录。 3)pwd命令:返回当前工作日录。 4)run命令:执行当前被调试的程序。 5)kill命令:停止正在调试的应用程序。 第22页,共35页,2022年,5月20日,3点8分,星期三6)list命令:列出正在调试的应用程序的源代码。 7)break命令:设置断点。 8)Tbreak命令;设置临时断点。它的语法与break相同。区别在于用tbreak设置的断点执行一次之后立即消失。 9)watch命令:设置监视点,监视表达式的变化。 10)awatch命令:设置读写监视点。当要监视的表达式被读或写时将应用程序挂起。它的语法与watch命令相同。 11)r

13、watch命令:设置读监视点,当监视表达式被读时将程序挂起,等侍调试。此命令的语法与watch相同。第23页,共35页,2022年,5月20日,3点8分,星期三12)next命令:执行下一条源代码,但是不进入函数内部。也就是说,将一条函数调用作为一条语句执行。执行这个命令的前提是已经run,开始了代码的执行。 13)step命令:执行下一条源代码,进入函数内部。如果调用了某个函数,会跳到函数所在的代码中等候一步步执行。执行这个命令的前提是已经用run开始执行代码。 14)display命令:在应用程序每次停止运行时显示表达式的值。15)info break命令:显示当前断点列表,包括每个断点到

14、达的次数。第24页,共35页,2022年,5月20日,3点8分,星期三16)info files命令:显示调试文件的信息。 17)info func命令:显示所有的函数名。 18)info local命令:显示当前函数的所有局部变量的信息。 19)info prog命令:显示调试程序的执行状态。 20)print命令;显示表达式的值。 21)delete命令:删除断点。指定一个断点号码,则删除指定断点。不指定参数则删除所有的断点。 22)Shell命令:执行Linux Shell命令。 23)make命令:不退出gdb而重新编译生成可执行文件。 24)Quit命令:退出gdb。第25页,共35

15、页,2022年,5月20日,3点8分,星期三3、6 Make工程管理器一、Makefile基本结构一个Makefile文件主要含有一系列的规则,每条规则包含以下内容。一个目标(target),即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如“clean”。一个或多个依赖文件(dependency)列表,通常是编译目标文件所需要的其他文件。 一系列命今(command),是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命令,每个命令占一行,且每个命令行的起始字符必须为TAB字符。第26页,共35页,2022年,5月20日,3点8分,星期三Make

16、file规则的一般形式如下:target:dependency dependency(tab)第27页,共35页,2022年,5月20日,3点8分,星期三例如有两个文件hello.c和hello.h:/*hello.c*/int main() printf(firstn);return 0;/* hello.h*/#include 创建的目标为可执行程序hello,则对应的Makefike写为:hello:hello.c hello.hgcc hello.c -o hello第28页,共35页,2022年,5月20日,3点8分,星期三二、Makefile变量例如,有以下的Makefile文件:

17、test:prog.o code.ogcc o test prog.o code.oprog.o:prog.c prog.h code.hgcc c prog.c o prog.ocode.o:code.c code.hgcc c code.c o code.oclean:rm f *.o 第29页,共35页,2022年,5月20日,3点8分,星期三变量的主要作用如下: 保存文件名列表。保存可执行命令名。 保存编译器的参数。定义变量的语法:VARNAME=string使用时,把变量用括号括起来,并在前面加上$符号,就可以引用变量的值: $VARNAME第30页,共35页,2022年,5月20日

18、,3点8分,星期三现在利用变量把前面的Makefile重写一遍:OBJS=prog.o code.oCC=gcctest:$ OBJS $ CC o test $ OBJS prog.o:prog.c prog.h code.h$ CC c prog.c o prog.ocode.o:code.c code.h$ CC c code.c o code.oclean:rm f *.o 第31页,共35页,2022年,5月20日,3点8分,星期三Makefile中还有一些预定义变量和自动变量,但是看起来并不像自定义变量那样直观。P89表3.15给出了常见的自动变量。除了自动变量外,Makefile中还有一些预定义的内部变量,用于定义编译命令名、编译参数等,如表3.14所示第32页,共35页,2022年,5月20日,3点8分,星期三现在利用自动变量把前面的Makefile重写一遍:OBJS=prog.o cod

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论