1、复 习,第1章 嵌入式系统基础,1.1.1 嵌入式系统的定义,嵌入式系统不同于常见的计算机系统,不以独立的设备物质形态出现,没有统一的外观,它根据主体设备已经应用的需要嵌入在设备内部、发挥着运算、处理、存储及控制的作用。,体系结构,嵌入式处理器,支撑硬件,嵌入式软件,微处理器、微控制器、SOC等,存储介质、通信部件、显示部件、控制部件等,驱动程序、操作系统、BSP、应用中间件等,嵌入式系统定义1、嵌入式系统是指以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、成本、体积、功耗和可靠性严格要求的专用计算机系统。嵌入式系统主要有嵌入式处理器、外围硬件设备、嵌入式操作系统以及特定的
2、应用程序等四部分组成,是集软硬件于一体的可独立工作的“器件”。,嵌入式操作系统,嵌入式操作系统是用来管理存储器分配、中断处理、任务间通信和定时器响应,以及提供多任务处理等的软件模块集合。,嵌入式操作系统常常有实时要求,所以嵌入式操作系统往往又是“实时操作系统”。,1.1.3 嵌入式系统的特点,其最本质的三个特点为: 嵌入性、专用性和计算机体系。具体而言: 1、嵌入性:很多嵌入式系统用户界面不够友好,甚至没有。(如:汽车上的ABS系统等)这是因为某些系统不需要和用户进行数据交互,就能够完成任务。这就不强调界面友好美观与PC不同。,1.1.3 嵌入式系统的特点,2、专用性:在嵌入式领域,有集成了众
3、多通信接口的通信处理器;有集成音频、视频接口的用于摄像的专用处理器;还有低功耗的手机处理器等等,几乎每一个特定的市场,都有一种特定的功能,特别的处理器与之对应。这也就觉得了嵌入式处理器品种的千差万别,不像在PC领域,处理器主流Intel和AMD两大品牌。(Intel Xscale, Intel StongARM,Motorola PowerPC,ARM,Toshiba SHX),1.1.3 嵌入式系统的特点,3、计算机体系:嵌入式系统是软硬件结合的,但又有他的特殊性,如软件相对特定,因为嵌入式系统的专用性,所以嵌入式系统的软件往往都是针对特定系统特定功能而专门开发的;同时有些嵌入式系统有较高的
4、实时性要求(如核武器的导航系统),有些需要功耗极低(如手持设备),需要工作在低温环境或者其他恶劣环境、成本控制严格等,另外如电信设备的嵌入式系统要求非常的稳定等等。,一、 嵌入式处理器分类,嵌入式微处理器(Embedded Microprocessor Unit, EMPU) 微控制器(Microcontroller Unit, MCU) DSP处理器(Digital Signal Processor, DSP) 片上系统(System On Chip,SOC),ARM处理器,ARM(Advanced RISC Machines)公司是全球领先的16/32位RISC微处理器知识产权设计供应商。
5、,ARM处理器有3大特点: 小体积、低功耗、低成本而高性能; 16/32位双指令集; 全球众多的合作伙伴。,ARM处理器分ARM7、ARM9、ARM9E、ARM10、ARM11、Cortex和SecurCore系列。,代码编程,生成代码阶段,在嵌入式系统的开发过程中,一般采用的方法是先在通用PC上编程,然后通过交叉编译链接,将程序做成目标平台上可以运行的二进制代码格式。最后将程序下载到目标平台上的特定位置,在目标板上启动运行这段二进制代码。,生成代码阶段,交叉编译和链接,嵌入式软件开发编码完成后,要进行编译和链接以生成可执行代码。但是,在开发过程中设计人员普遍使用Intel的x86系列CPU的
6、计算机进行开发,而目标环境的处理芯片却是多种多样的,如ARM,DSP,PowerPC,DragonBall系列等,这就要求开发机上的编译器能支持交叉编译。嵌入式集成开发环境都支持交叉编译、链接,如WindRiver公司的Tornado以及GNU套件等。交叉编译链接生成两种类型的可执行文件:调试用的可执行文件和固化的可执行文件。,生成代码阶段,交叉调试,交叉调试,又叫远程调试,具有以下特点:调试器和被调试的程序运行在不同的机器上。调试器运行在PC或工作站上,而被调试程序运行在各式的专用目标机上;调试器通过某种通信方式与目标机建立联系,如串口、并口、网络、JTAG或者专用的通信方式;在目标机上一般
7、具有某种调试代理,这种代理能与调试器一起配合完成对目标机上运行程序的调试。这种代理可以是某种能支持调试的硬件,也可以是某种软件;目标机可以是一种仿真机。通过在宿主机上运行目标机的仿真软件,仿真一台目标机,使整个调试工作只在一台计算机上进行。,测试,嵌入式系统开发的测试与通用软件的测试相似,分为单元测试和系统集成测试。,2.3 嵌入式系统的调试,嵌入式系统的调试方法: 1源程序模拟器方式 2监控器方式 3仿真器方式,嵌入式系统的调试过程:,源程序模拟器方式,源程序模拟器(Simulator)是在PC机上,通过软件手段模拟执行为某种嵌入式处理器编写的源程序的测试工具。注意:模拟器的功能毕竟是以一种
8、处理器模拟另一种处理器的运行,在指令执行时间、中断响应、定时器等方面很有可能与实际处理器有相当大的差别。另外,它无法仿真嵌入式系统在应用系统中的实际执行情况。比如:ARM公司的ARMulator模拟器,监控器方式,监控器(Monitor)调试方式需要目标机与宿主机协调。首先,在宿主机和目标机之间通过串口、以太口等建立物理连接,然后在宿主机上运行调试器,目标机运行监控程序和被调试程序,从而建立宿主机与目标机的逻辑连接。宿主机通过调试器与目标机的监控器建立通信连接,它们相互间的通信遵循远程调试协议。比如ARM公司的Angel。,仿真器方式,仿真器调试方式是在微处理器的内部嵌入额外的控制模块。当特定
9、的触发条件满足时,系统将进入某种特殊状态。在这种状态下,被调试的程序暂时停止运行,宿主机的调试器通过微处理器外部特设的通信口访问各种寄存器、存储器资源,并执行相应的调试指令。在宿主机的通信端口和目标板调试通信接口之间,通信接口的引脚信号可能存在差异,因此在这两者之间往往可以通过一块信号转换电路板连接。一般高档的微处理器都带JTAG (Joint Test Action Group,联合测试行动组)接口,它是一种边界扫描标准,只需5根引脚就可以实现在线仿真的功能。,第3章 ARM体系结构,3.1.1 ARM体系结构的特点,ARM体系结构的特点:,RISC型处理器结构 ARM/Thumb指令集 多
10、处理器状态模式 (7种处理器模式) 嵌入式在线仿真调试 灵活和方便的接口 ARM体系结构具有协处理器接口 ARM处理器核还具有片上总线AMBA(AHB/ASB/APB) 低电压低功耗的设计,ARM体系结构的3级流水线,ARM7体系结构采用了3级流水线,分为取指,译码和执行。下图是单周期3级流水线的操作示意图。,ARM9TDMI,流水线结构,ARM9TDMI处理器内核采用了5级流水线。,ARM I/O结构,ARM架构中的处理器核和处理器内核一般都没有I/O的部件和模块,构成ARM架构的处理器中的I/O可通过AMBA总线来扩充。,(1)存储器映像I/OARM采用存储器映像I/O的方式,即把I/O端
11、口地址作为特殊的存储器地址。不过I/O的输入/输出与真正的存储器读/写仍然有所不同:存储器的单元重复读多次的值是一致的;而I/O设备的连续2次输入,其输入值可能会有所不同。 (2)直接存储器存取DMA在I/O的数据流量比较大,中断处理比较频繁的场合,会明显影响系统的性能。因此,许多系统就采用了直接存储器存取DMA,这样,I/O的数据块传送至存储器的缓冲器区域就不需要处理器介入。而中断也仅仅出现在出现出错时或缓冲器满时。 (3)中断IRQ和快速中断FIQ一般的ARM没有DMA的功能,为了提高I/O处理的能力,对于一些要求I/O处理速率比较高的事件,系统安排快速中断FIQ(Fast Interru
12、pt),而对其余的I/O源仍安排一般中断IRQ。,ARM AMBA接口,ARM处理器也可以通过先进微控制器总线架构AMBA(Advanced Microcontroller Bus Architecture)来扩展不同体系架构的宏单元及I/O部件。AMBA事实上已成为片上总线OCB(On Chip Bus)标准。,AMBA包括以下三类总线: 先进高性能总线AHB 先进系统总线ASB 先进外围总线APB,3.1.3 ARM处理器内核,ARM体系结构的处理器内核有:ARM7TDMI、ARM8、ARM9TDMI、ARM10TDMI及ARM11TDMI等。,3.1.4 ARM处理器核,在最基本的ARM
13、处理器内核基础上,可增加Cache、存储器管理单元MMU、协处理器CP15、AMBA接口以及EMT宏单元等,构成ARM处理器核。以ARM7TDMI处理器内核为基础的有: ARM720T处理器核 ARM740T处理器核 以ARM9TDMI处理器内核为基础的有: ARM920T处理器核 ARM940T处理器核,ARM940T,ARM940T处理器核与ARM740T处理器核相似,采用了ARM9TDMI处理器内核,是ARM920T处理器核的简化。没有存储器管理单元MMU,不支持虚拟存储器寻址,而是用有储器保护单元来提供存储保护和Cache控制。ARM940T的存储保护单元结构与ARM740T的基本相同
14、。,3.2.1 数据类型,ARM处理器支持下列数据类型: Byte 字节, 8位; Halfword 半字, 16位(半字必须与2字节边界对准); Word 字,32 位(字必须与4字节边界对准)。,3.2.2 处理器模式,ARM体系结构支持7种处理器模式。软件控制下可以改变模式,外部中断或异常处理也可引起模式发生改变。,3.2.3 处理器工作状态,ARM处理器有两种工作状态: ARM: 32位,这种状态下执行字对准的ARM指令; Thumb:16位,这种状态下执行半字对准的Thumb指令。,ARM处理器在两种工作状态之间可以切换。ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内
15、容。 (1)进入Thumb状态。当操作数寄存器的状态位(位0)为1时,执行BX指令进入Thumb状态。如果处理器在Thumb状态进入异常,则当异常处理(IRQFIQUndefAbort和 SWI)返回时,自动转换到Thumb状态。 (2)进入ARM状态。当操作数寄存器的状态位(位0)为0时,执行BX指令进入ARM状态。处理器进行异常处理(IRQFIQResetUndef Abort和SWI)。在此情况下,把PC放入异常模式链接寄存器中。从异常向量地址开始执行也可以进入ARM状态。,3.2.4 寄存器组织,ARM处理器总共有37个寄存器:P69 31个通用寄存器,包括程序计数器(PC)。这些寄存
16、器是32位的。 6个状态寄存器。这些寄存器也是32位的,但只使用了其中的12位。,通用寄存器,通用寄存器(R0R15)可分成3类: 不分组寄存器R0R7:在所有的处理器模式下,它们每一个都访问一样的32位物理寄存器。 分组寄存器R8R14:它们每一个访问的物理寄存器取决于当前的处理器模式。每种处理器模式有专用的分组寄存器用于快速异常处理。寄存器R13通常用作堆栈指针,称作SP。 寄存器R14用作子程序链接寄存器,也称为链接寄存器LR。 寄存器R8R12各有两组物理寄存器。一组为FIQ模式,另一组为除FIQ以外的其它模式。 寄存器R13、R14各有6个分组的物理寄存器。1个用于用户模式和系统模式
17、,而其它5个分别用于5种异常模式。 程序计数器R15: 在ARM状态,位1:0为,位31:2 保存PC 在Thumb状态,位0为0,位31:1保存 PC。,3.2.5 异常,异常由内部或外部源产生并引起处理器处理一个事件,例如外部中断或试图执行未定义指令都会引起异常。 ARM支持7种类型的异常。,当异常出现时,异常模式分组的R14和SPSR用于保存状态。当处理异常返回时,把SPSR传送到CPSR,R14传送到PC。这可用两种方法自动完成,即 使用带“S”的数据处理指令,将PC作为目的寄存器; 使用带恢复CPSR的多加载指令。,3.2.5 异常,简介,只要正常的程序流被暂时中止,处理器就进入异常
18、模式。例如响应一个来自外设的中断。在处理异常之前,ARM内核保存当前的处理器状态(CPSR-SPSR),这样当处理程序结束时可以恢复执行原来的程序(SPSR-CPSR)。如果同时发生两个或更多异常,那么将按照固定的顺序来处理异常,详见“异常优先级”部分。,异常入口/出口汇总,注意:“MOVS PC,R14_svc”是指在管理模式执行MOVS PC,R14指令。“MOVS PC,R14_und”、“SUBS PC,R14_abt,#4”等指令也是类似的。,当多个异常同时发生时,一个固定的优先级系统决定它们被处理的顺序:,3.2.5 异常,异常优先级,存储器系统有两种映射机制: 小端存储器系统:在
19、小端格式中,高位数字存放在高位字节中。因此存储器系统字节0连接到数据线70(低位对齐)。 大端存储器系统:在大端格式中,高位数字存放在低位字节中。因此存储器系统字节0连接到数据线3124(高位对齐) 。,3.2.6 存储器及存储器映射I/O,存储器格式,寻址方式是根据指令中给出的地址码字段来寻找真实操作数地址的方式。ARM处理器支持的基本寻址方式有:,3.3 ARM基本寻址方式,寄存器寻址 立即寻址 寄存器移位寻址 寄存器间接寻址 变址寻址 多寄存器寻址 堆栈寻址 块复制寻址 相对寻址,3.4.1 条件执行,几乎所有的ARM指令均可包含一个可选的条件码,句法说明中以cond表示,只有在CPSR
20、中的条件码标志满足指定的条件时,带条件码的指令才能执行。并使用后缀“S”来区分是否根据执行结果修改条件码标志。,3.4.2 指令分类说明,32位ARM指令集由13种基本指令类型组成,分成4大类:3种类型的存储器访问指令:控制存储器和寄存器之间的数据传送。一种类型用于优化的灵活寻址;另一种类型用于快速上下文切换;第三种类型用于交换数据。3种类型的数据处理指令:使用片内ALU、桶形移位器和乘法器针对31个寄存器完成高速数据处理操作。4种类型的分支指令:控制程序执行流程、指令优先级以及ARM代码和Thumb代码的切换。3种类型的协处理器指令:专用于控制外部协处理器。这些指令以开放和统一的方式扩展了指
21、令集的片外功能。,ARM指令集第2个操作数,#immed_8r常数表达式该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到。,循环右移10位,8位常数,ARM伪指令大范围的地址读取,LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。,LDRcond register,=expr | label_expr,LDR伪指令格式,指令执行的条件码,加载的目标
22、寄存器,基于PC的地址表达式或外部表达式,注意: 1.从指令位置到文字池的偏移量必须小于4KB; 2.与ARM指令的LDR相比,伪指令的LDR的参数有“=”号。,作业:简述ARM处理器所支持的4种类型的堆栈 ARM处理器支持的数据类型有哪些? 解释以下各条指令所实现的功能(1) LDR R0, R1, #-4(2) ADD R0, R0, R0, LSL #2(3) EOR R11, R12, R3, ASR #5(4) ANDS R1, R1, R2, LSL R3(5) SWP R1, R1, R2(6) LDR R0, R1, R2! 4. 如何辨别LDR指令是ARM机器指令还是伪指令?
23、各举出3条数据传送LDR指令和3条LDR伪指令的例子,第 4 章 ARM系统硬件设计基础,4.2.1 ARM汇编器支持的伪指令,伪指令是ARM汇编语言程序中的一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,它们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序做各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成了。ARM汇编器支持的伪指令包括:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。,ARM汇编器支持的常见伪指令,4.2.2 基于ARM的汇编语言语句格式,ARM汇编语言的语句格式,标号 指令或伪指
24、令 ;注释,标号是代表地址的符号,必须在一行的顶格书写,其后不能添加冒号“:”,而所有指令均不能顶格书写。 ARM汇编语言对标识符的大小写敏感,书写标号及指令时字母大小写要一致。 在ARM汇编语言中,ARM指令、伪指令、寄存器名等可以全部大写或者全部小写,但不能大小写混合使用。 为了使源文件易读,可以将一条长的指令通过使用反斜杠字符“”将其分成几行书写。 每行从第一个分号开始到本行结束为注释内容,所有的注释内容均被汇编起忽略。,4.2.3 ARM汇编语言程序的基本结构,在ARM汇编语言程序中,以程序段为单位来组织代码。段是相对独立的指令或数据序列,具有特定的名称。段可以分为代码段和数据段,代码
25、段的内容为执行代码,数据段存放代码运行时所需的数据。可执行映像文件通常由以下几部分构成:一个或多个代码段,代码段为只读属性。零个或多个包含初始化数据的数据段,数据段的属性为可读写。零个或多个不包含初始化数据的数据段,数据段的属性为可读写。,硬件启动程序的工作一般包括:(1) 分配中断向量表 (2) 初始化存储器系统 (3) 初始化各工作模式下的堆栈 (4) 初始化有特殊要求的硬件模块 (5) 初始化用户程序的执行环境 (6) 切换处理器的工作模式 (7) 呼叫主应用程序,4.3 基于ARM的硬件启动程序,(5) 初始化用户程序的执行环境,可执行程序映像的结构:,映像一开始总是存储在ROM/Fl
26、ash中,其RO部分既可以在ROM/Flash中执行,也可以转移到速度更快的REM中执行;而RW和ZI这两部分必须转移到可写的RAM中。应用程序执行环境的初始化,就是完成必要的从ROM到RAM的数据传输和内容清零。,4.4.1 C语言与汇编语言混合编程应遵守的规则,在C程序和ARM汇编程序之间相互调用时必须遵守ATPCS规则。ATPCS规定了一些子程序间调用的基本规则,比如: 寄存器的使用规则 子程序之间通过寄存器r0r3来传递参数,当参数个数多于4个时,使用堆栈来传递参数。 在子程序中,使用寄存器r4r11保存局部变量。 寄存器r12用于保存堆栈指针SP,当子程序返回时使用该寄存器出栈,记作
27、IP。寄存器r13用作堆栈指针,记作SP。寄存器r14称为链接寄存器,记作LR。该寄存器用于保存子程序的返回地址。寄存器r15称为程序计数器,记作PC。,堆栈的使用规则 堆栈采用满递减类型(FD,Full Descending),即堆栈通过减小存储器地址而向下增长,堆栈指针指向内含有效数据项的最低地址。 参数的传递规则 整数参数的前4个使用r0r3传递,其他参数使用堆栈传递;浮点参数使用编号最小且能够满足需要的一组连续的FP寄存器传递参数 子程序的返回结果为一个32位整数时,通过r0返回;返回结果为一个64位整数时,通过r0和r1返回;依此类推。结果为浮点数时,通过浮点运算部件的寄存器F0、D
28、0或S0返回,4.4.2 汇编程序调用C程序的方法,汇编程序调用C程序的方法为:首先在汇编程序中使用IMPORT伪指令事先声明将要调用的C语言函数;然后通过BL指令来调用C函数。,例如在一个C源文件中定义了如下求和函数: int add(int x,int y)return(x+y); 调用add()函数的汇编程序结构如下: IMPORT add ;声明要调用的C函数 MOV r0,1 ;通过r0和r1来传递参数 MOV r1,2 BL add ;调用C函数add,4.4.3 C程序调用汇编程序的方法,C程序调用汇编子程序的方法为:首先在汇编程序中使用EXPORT伪指令声明被调用的子程序,表示
29、该子程序将在其他文件中被调用;然后在C程序中使用extern关键字声明要调用的汇编子程序为外部函数。,例如在一个汇编源文件中定义了如下求和函数: EXPORT add ;声明add子程序将被外部函数调用 add ;求和子程序addADD r0,r0,r1MOV pc,lr 在一个C程序的main()函数中对add汇编子程序进行了调用: extern int add(int x,int y); /声明add为外部函数 void main()int a=1,b=2,c;c=add(a,b); /调用add子程序 ,4.4.4 C程序中内嵌汇编语句,在C语言中内嵌汇编语句可以实现一些高级语言不能实现
30、或者高级语言不容易实现的功能以及时间紧迫的功能。 内嵌的汇编器支持大部分ARM指令和Thumb指令,但是不支持诸如直接修改PC实现跳转的底层功能,也不能直接引用C语言中的变量。,嵌入式汇编语句在形式上表现为独立定义的函数体,其语法格式为: _ _asm 指令;指令指令 ,第 5 章 基于S3C2410的系统硬件设计,5.1.4 时钟和电源管理,时钟和电源管理模块包括三部分:时钟控制:CPU所需的FCLK时钟信号、AHB总线外围设备所需的HCLK时钟信号,以及APB总线外围设备所需的PCLK时钟信号 。 USB控制 电源控制,正常模式 慢速模式 空闲模式 掉电模式,5.2.1 S3C2410A的
31、I/O口工作原理,S3C2410A共有117个多功能复用输入输出口(I/O口),分为8组PORT APORT H。PORT A除了作为功能口外,它只作为输出口使用;其余的PORT BPORT H都可以作为输入输出口使用。8组I/O口按照其位数的不同,可分为: 1个23位的输出口(PORT A) 2个11位的I/O口(PORT B 和PORT H) 4个16位的I/O口(PORT C、PORT D、PORT E、PORT G) 1个8位的I/O口(PORT F),与配置I/O口相关的寄存器包括: 端口控制寄存器(GPACONGPHCON) 端口数据寄存器(GPADATGPHDAT) 端口上拉寄存
32、器(GPBUPGPHUP) 杂项控制寄存器 外部中断控制寄存器(EXTINTN),5.3.1 ARM的中断原理,ARM系统包括两类中断:一是IRQ中断,一是FIQ中断。,处理中断的步骤如下: (1)保存现场。保存当前的PC值到R14,保存当前的程序运行状态到SPSR。 (2)模式切换。根据发生的中断类型,进入IRQ模式或FIQ模式。 (3)获取中断源。以异常向量表保存在低地址处为例,若是IRQ中断,则PC指针跳到0x18处;若是FIQ中断,则跳到0x1C处。IRQ或FIQ的异常向量地址处一般保存的是中断服务子程序的地址,所以接下来PC指针跳入中断服务子程序处理中断。 (4)中断处理。为各种中断
33、定义不同的优先级别,并为每一个中断设置一个中断标志位。当发生中断时,通过判断中断优先级以及访问中断标志位的状态来识别到底哪一个中断发生了。进而调用相应的函数进行中断处理。 (5)中断返回,恢复现场。当完成中断服务子程序后,将SPSR中保存的程序运行状态恢复到CPSR中,R14中保存的被中断程序的地址恢复到PC中,进而继续执行被中断的程序。,2410的UART,S3C2410A 的UART (Universal Asynchronous Receiver and Transmitter) 提供了三个独立的异步串行I/O口,每一个都可以工作在中断模式或DMA模式,即UART可以产生中断或DMA请求
34、以在CPU和UART之前传送数据,使用系统时钟,UART最高可以支持230.4K bps 的位传输率。 如果采用外部带时钟的UART,则UART可以实现更度速度的传输; 每个UART包括2个16Byte的接收/发送FIFO。,UART的操作,串口初始化,发送数据,接收数据,第 6 章 Linux操作系统基础,6.3.1 设备文件,Linux将所有外部设备看成是一类特殊文件,称之为“设备文件”。,对设备文件的识别使用设备类型、主设备号和次设备号:,设备类型:字符设备或者块设备。 主设备号:按照设备使用的驱动程序不同而赋予设备不同的主设备号。主设备号与驱动程序一一对应。 次设备号:用来区分使用同一
35、个驱动程序的不同设备。,6.4.3 make工具和gcc编译器,gcc,gcc是可以在多种平台上编译出可执行程序的超级编译器。,举例:gcc c hello.cgcc -o hello.exe hello.c,make命令,makefile,make命令用于根据文件之间的依赖关系(在makefile文件中定义)来自动维护目标文件,与手工编译和链接相比,make命令的优点在于它只更新修改过的文件 。,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。 makefile带来的好处就是“自动化编译”,一旦写好makefile,只需要一个make命令,整个工程即可实现完全自动编译,从而极大地提高了软件开发的效率。,