已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统的定义:在系统中有些计算机是作为某个专用系统中的一个部件而存在的,像这样“嵌入”到更大、专用的系统中的计算机系统,称之为“嵌入式计算机”、“嵌入式计算机系统”或“嵌入使系统”。嵌入式系统的组成::通常由嵌入式处理器、外围设备、嵌入式操作系统和应用软件等几大部分组成。 实时系统(Real Time System):是指产生系统输出的时间对系统至关重要的系统。从输入到输出的滞后时间必须足够小到一个可以接受的时限内。 实时系统的分类:根据响应时间可分为3种类型: 1强实时系统 2弱实时系统 3一般实时系统根据确定性可分为2种类型: 1硬实时系统 2软实时系统实时操作系统(RTOS)是具有实时性且能支持实时控制系统工作的操作系统。 RTOS与通用计算机OS的区别:实时性:响应速度快,只有几微秒;执行时间确定、可预测;代码尺寸小:10100KB,节省内存空间,降低成本;应用程序开发较难;需要专用开发工具:仿真器、编译器和调试器等。单片机系统、嵌入式系统和SOC系统三者有何区别和联系?单片机位的电子器件,内部集成Flash、RAM、总线逻辑、定时器/计数器、WatchDog、I/O,串行口、脉宽调制输出、A/D,D/A等各种必要的功能模块和外围部件。SoC就是System on Chip,SoC是一种基于IP(Intellectual Property)核嵌入式系统设计技术。它结合了许多功能区块,将功能做在一个芯片上,ARM RISC、MIPS RISC、DSP或是其他的微处理器核心,加上通信的接口单元交叉开发环境:是指实现编译、链接和调试应用程序代码的环境与运行应用程序的环境不同,它分散在有通信连接的宿主机与目标机环境之中。宿主机(Host)是一台通用计算机,一般是PC机。它通过串口或网络连接与目标机通信。目标机(Target) 可以是嵌入式应用软件的实际运行环境,也可以是能替代实际环境的仿真系统。嵌入式系统的调试方法:1源程序模拟器方式 2监控器方式 3仿真器方式源程序模拟器(Simulator)是在PC机上,通过软件手段模拟执行为某种嵌入式处理器编写的源程序的测试工具。监控器(Monitor)调试方式需要目标机与宿主机协调。首先,在宿主机和目标机之间通过串口、以太口等建立物理连接,然后在宿主机上运行调试器,目标机运行监控程序和被调试程序,从而建立宿主机与目标机的逻辑连接。宿主机通过调试器与目标机的监控器建立通信连接,它们相互间的通信遵循远程调试协议。仿真器调试方式是在微处理器的内部嵌入额外的控制模块。当特定的触发条件满足时,系统将进入某种特殊状态。在这种状态下,被调试的程序暂时停止运行,宿主机的调试器通过微处理器外部特设的通信口访问各种寄存器、存储器资源,并执行相应的调试指令。BSP(板级支持包)由于嵌入式系统中采用微处理器微控制器的多样性,嵌入式操作系统的可移植性显得更加重要。所以有些嵌入式操作系统的内核明确分成两层,上层一般称为“内核”,而低层则称为“硬件抽象层”,即BSP。板级支持包的主要功能包括两部分:在系统启动时,对硬件进行初始化 为驱动程序提供访问硬件的手段ARM即Advanced RISC Machines的缩写ARM处理器的三大特点是:耗电少、成本低、功能强;16位/32位双指令集;全球众多合作伙伴保证供应。ARM体系结构的特点: 高的指令吞吐率 出色的实时中断响应 体积小、性价比高的处理器宏单元ARM内含37个寄存器,其中:31个通用32位寄存器6个状态寄存器 指令执行的阶段计算机中的1条指令的执行可以分若干个阶段: 取指,从存储器中取出指令(fetch); 译码,指令译码(dec): 取操作数,假定操作数从寄存器组中取(reg); 执行运算(ALU); 存储器访问,操作数与存储器有关(mem); 结果写回寄存器(res)。 ARM7 体系结构的3级流水线:采用了3级流水线,分为取指,译码和执行。ARM9体系结构的5级流水线5级流水线把存储器的取指与数据存取分开,增加了I-Cache和D-Cache以提高存储器存取的效率,增加了数据写回的专门通路和寄存器,以减少数据通路冲突。这样,5级流水线分为:取指、指令译码、执行、数据缓存和写回。 ARM AMBA接口ARM处理器也可以通过先进微控制器总线架构AMBA(Advanced Microcontroller Bus Architecture)来扩展不同体系架构的宏单元及I/O部件。AMBA事实上已成为片上总线OCB(On Chip Bus)标准。AMBA包括以下三类总线:先进高性能总线AHB先进系统总线ASB先进外围总线APBARM7TDMI名字原义如下:ARM7 ARM6 32位整数核的3V兼容的版本;T 16位压缩指令集Thumb;D 在片调试(Debug)支持,允许处理器响应调试请求暂停;M 增强型乘法器(Multiplier),与以前处理器相比性能更高,产生全64位结果;I 嵌入式ICE硬件提供片上断点和调试点支持。主要特点处理器模 式说 明用户usr正常程序执行模式FIQfiq支持高速数据传送或通道处理IRQirq用于通用中断处理管理svc操作系统保护模式中止abt实现虚拟存储器和/或存储器保护未定义und支持硬件协处理器的软件仿真系统sys运行特权操作系统任务采用了3级流水线结构,指令执行分为取指、译码和执行等3个阶段;ARM9TDMI主要特点采用指令和数据分离访问的方式,即采用了指令Cache和数据Cache。用专门硬件来直接完成ARM与Thumb指令的译码。ARM9TDMI也有协处理器接口,允许在芯片增加浮点、数字信号处理或其他专用的协处理器。ARM9TDMI也提供相应的软核。ARM9E-S是具有DSP功能的能执行v5TE版ARM指令的ARM9TDMI软核,当然其芯片面积要增加30。在ARM9流水线设计中,增加专用流水段用于存储器访问和将结果写回到寄存器组。而且,寄存器读也移到译码段。这些改变通过减少在单一时钟周期内操作最大的逻辑数目,允许更高的时钟频率。 ARM920T处理器核是在ARM9TDMI处理器内核基础上,增加了分离式的指令Cache和数据Cache,并带有相应的存储器管理单元I-MMU和D-MMU、写缓冲器及AMBA接口等。ARM处理器支持下列数据类型:Byte 字节, 8位;Halfword 半字, 16位(半字必须与2字节边界对准);Word 字,32 位(字必须与4字节边界对准)。ARM体系结构支持7种处理器模式。处理器模式说明用户usr正常程序执行模式FIQFiq支持高速数据传送或通道处理IRQirq用于通用中断处理管理svc操作系统保护模式中止abt实现虚拟存储器和/或存储器保护未定义und支持硬件协处理器的软件仿真系统sys运行特权操作系统任务硬件启动程序的工作一般包括:(1) 分配中断向量表(2) 初始化存储器系统(3) 初始化各工作模式下的堆栈(4) 初始化有特殊要求的硬件模块(5) 初始化用户程序的执行环境(6) 切换处理器的工作模式(7) 呼叫主应用程序C语言与汇编语言混合编程应遵守的规则在C程序和ARM汇编程序之间相互调用时必须遵守ATPCS规则。ATPCS规定了一些子程序间调用的基本规则,比如:寄存器的使用规则子程序之间通过寄存器r0r3来传递参数,当参数个数多于4个时,使用堆栈来传递参数。在子程序中,使用寄存器r4r11保存局部变量。寄存器r12用于保存堆栈指针SP,当子程序返回时使用该寄存器出栈,记作IP。寄存器r13用作堆栈指针,记作SP。寄存器r14称为链接寄存器,记作LR。该寄存器用于保存子程序的返回地址。寄存器r15称为程序计数器,记作PC。 堆栈的使用规则堆栈采用满递减类型(FD,Full Descending),即堆栈通过减小存储器地址而向下增长,堆栈指针指向内含有效数据项的最低地址。 参数的传递规则整数参数的前4个使用r0r3传递,其他参数使用堆栈传递;浮点参数使用编号最小且能够满足需要的一组连续的FP寄存器传递参数子程序的返回结果为一个32位整数时,通过r0返回;返回结果为一个64位整数时,通过r0和r1返回;依此类推。结果为浮点数时,通过浮点运算部件的寄存器F0、D0或S0返回 汇编程序调用C程序的方法为:首先在汇编程序中使用IMPORT伪指令事先声明将要调用的C语言函数;然后通过BL指令来调用C函数。 例如在一个C源文件中定义了如下求和函数:int add(int x,int y) return(x+y);调用add()函数的汇编程序结构如下: IMPORT add ;声明要调用的C函数MOV r0,1MOV r1,2BL add ;调用C函数addC程序调用汇编子程序的方法为:首先在汇编程序中使用EXPORT伪指令声明被调用的子程序,表示该子程序将在其他文件中被调用;然后在C程序中使用extern关键字声明要调用的汇编子程序为外部函数。 例如在一个汇编源文件中定义了如下求和函数:EXPORT add ;声明add子程序将被外部函数调用add ;求和子程序add ADD r0,r0,r1 MOV 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子程序 S3C2410A的I/O口工作原理 接口:是微处理器(CPU)与外界的连接部分(电路),是CPU与外界世界进行信息交换的中转站。接口技术研究的是CPU如何与外部世界进行最佳耦合与匹配,以实现双方高效、可靠地进行信息交换的技术。端口:在接口电路中通常包含若干个寄存器,数据传送时,不同的信息送入不同的寄存器,能够用IN/OUT指令对其进行读/写操作的寄存器称为端口寄存器,简称“端口”端口分类:数据端口、状态端口和控制端口与配置I/O口相关的寄存器包括:端口控制寄存器(GPACONGPHCON)端口数据寄存器(GPADATGPHDAT)端口上拉寄存器(GPBUPGPHUP)杂项控制寄存器外部中断控制寄存器(EXTINTN)ARM系统包括两类中断:一是IRQ中断,一是FIQ中断。处理中断的步骤如下:(1)保存现场。保存当前的PC值到R14,保存当前的程序运行状态到SPSR。(2)模式切换。根据发生的中断类型,进入IRQ模式或FIQ模式。(3)获取中断源。以异常向量表保存在低地址处为例,若是IRQ中断,则PC指针跳到0x18处;若是FIQ中断,则跳到0x1C处。IRQ或FIQ的异常向量地址处一般保存的是中断服务子程序的地址,所以接下来PC指针跳入中断服务子程序处理中断。(4)中断处理。为各种中断定义不同的优先级别,并为每一个中断设置一个中断标志位。当发生中断时,通过判断中断优先级以及访问中断标志位的状态来识别到底哪一个中断发生了。进而调用相应的函数进行中断处理。(5)中断返回,恢复现场。当完成中断服务子程序后,将SPSR中保存的程序运行状态恢复到CPSR中,R14中保存的被中断程序的地址恢复到PC中,进而继续执行被中断的程序。通过对G口的操作控制CPU板左下角的LED1和LED2实现轮流闪烁。void Main(void) int flag, i; Target_Init(); /进行硬件初始化操作,包括对I/O口的初始化操作 for(;) if(flag=0) for(i=0;i1000000;i+); /延时 rGPGCON = rGPGCON & 0xfff0ffff | 0x00050000; /配置第8、第9位为输出引脚 rGPGDAT = rGPGDAT & 0xeff | 0x200; /第8位输出为低电平 第9位输出高电平 for(i=0;i10000000;i+); /延时 flag = 1; else for(i=0;i1000000;i+); /延时 rGPGCON = rGPGCON & 0xfff0ffff | 0x00050000; /配置第8、第9位为输出引脚 rGPGDAT = rGPGDAT & 0xdff | 0x100; /第8位输出为高电平 第9位输出低电平for(i=0;i1000000;i+); /延时flag = 0; S3C2410A能够接收56个中断请求,但只有32个中断信号(引脚。)嵌入式系统的定义:(IEEE)嵌入式系统是“用于控制、监视或者辅助机器或设备运转的装置”;(一般)以应用为中心,以计算机技术为基础,软件硬件可裁剪,对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。嵌入式系统的特点:技术密集、专用性强、环境相关度高、功耗限制、成本敏感、操作系统内核小、不可垄断硬件组成:1、处理器核(核心处理器、时钟分频器、定时器、DMA、中断控制、I/O端口、A/D转换)2、外围电路(电源、晶振、复位、端口、DRAM、Flash、ROM、网口、调试接口和外设与扩展(USB、LCD、手写笔、键盘、红外等)。软件组成(由底层向上):嵌入式硬件层、BSP嵌入式RTOS(基本组件:功耗管理、文件管理、GUI、操作系统内核、有线无线网络;扩展组件:汽车电子、浏览器、信息家电、嵌入式数据库)、API、嵌入式应用系统。嵌入式处理器分类:微控制器:偏重程序流程控制,响应速度;微处理器:偏重运算功能,数据流较大;嵌入式:偏重数字信号处理功能;片上系统:集成度高,可编程模拟电路,可重用IP软核。体系结构:冯诺依曼:由CPU、存储器系统和I/O设备组成,存储器系统负责存储全部数据和指令,并可以根据拨给的地址对其进行读写操作,数据和指令存在同一存储器中;哈佛:程序存储器和数据存储器分开,程序计数器只指向程序存储器而不指向数据存储器。(哈佛优势:数据和程序不必再竞争同一端口,加快了机器运行时间)CISC:指令数量很多;有些指令执行时间很长,如整块的存储器内容拷贝或将多个寄存器的内容拷贝到存贮器;编码长度可变,1-15字节;寻址方式多样;可以对存储器和寄存器进行算术和逻辑操作;难以用优化编译器生成高效的目标代码程序。RISC:较少,通常少于100;没有较长执行时间的指令;编码长度固定,通常为4个字节;简单寻址;只能对寄存器进行算术和逻辑操作,Load/Store体系结构;采用优化编译技术,生成高效的目标代码程序。指令流水线技术:几个指令可以并行执行。提高了CPU的运行效率,内部信息流要求通畅流动。PC指向正被取指的指令,而非正在执行的指令。cache:为什么采用高速缓存:微处理器的时钟频率比内存速度提高快得多,高速缓存可以提高内存的平均性能。高速缓存的工作原理:高速缓存是一种小型、快速的存储器,它保存部分主存内容的拷贝。存储器分类:RAM:Random Access Memory随机存取存储器(SRAM、SDRAM、DDR);ROM:Read Only Memory只读存储器(EEPROM、FLASH:NOR、NAND);SD卡、CF卡:Secure Digital Memory Card安全数码卡,Compact Flash;硬盘。数据在存储器中的组织方式:小端模式(Little-endian):数据字或双字的高字节存放在存储器的高地址,低字节存放在存储器的低地址;大端模式(Big-endian):数据字或双字的高字节存放在存储器的低地址,低字节存放在存储器的高地址。例:与存储模式无关的:unsigned long a=0x12345678; /a在地址0x4000unsigned long *b=&a; /b=0x4000unsigned char *c=(unsigned char *)&a; /c=0x4000取决于存储模式的:unsigned char d=(unsigned char)a;unsigned char e=*c; /小端时e=0x78,大端时e=0x12ARM处理器工作状态:ARM状态:32位,这种状态下执行的是字方式的ARM指令;Thumb状态:16位,这种状态下执行半字方式的ARM指令。两个状态之间的切换并不影响处理器模式或寄存器内容。ARM处理器的模式:用户(usr):正常程序执行模式;不能直接切换到其它模式。系统(sys):运行操作系统的特权任务;与usr类似,但具有可以直接切换到其它模式等特权。快中断(fiq):支持高速数据传输及通道处理;FIQ异常响应时进入此模式。中断(irq):用于通用中断处理;IRQ异常响应时进入此模式。管理(svc):操作系统保护模式;系统复位和软件中断响应时进入此模式。中止(abt):用于支持虚拟内存和/或存储器保护;在ARM9TDMI没有大用处。未定义(und):支持硬件协处理器的软件仿真;未定义指令异常响应时进入此模式。所有寄存器:通用寄存器和程序计数器(R0R15)、状态寄存器CPSR、SPSR(usr和sys模式时不含)。所有的37个寄存器,分成两大类:31个通用32位寄存器和6个状态寄存器。程序计数器R15(PC):正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。ARM处理器寻址方式:寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。ARM处理器具有9种基本寻址方式:1.寄存器寻址:操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下:MOV R1,R2 ;将R2的值存入R1SUB R0,R1,R2 ;将R1的值减去R2的值,结果保存到R02.立即寻址:立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下:SUBS R0,R0,#1 ;R0减1,结果放入R0,并且影响标志位MOV R0,#0xFF000 ;将立即数0xFF000装入R0寄存器3.寄存器移位寻址:寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下:MOV R0,R2,LSL #3 ;R2的值左移3位,结果放入R0,即是R0=R28ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相“与”操作,结果放入R14.寄存器间接寻址:寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下:LDRR1,R2 ;将R2指向的存储单元的数据读出保存在R1中SWPR1,R1,R2 ;将寄存器R1的值和R2指定的存储单元的内容交换5.基址寻址(变址寻址):基址寻址就是将基址寄存器的内容与指令中给出的偏移量(4K)相加/减,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。寄存器间接寻址是偏移量为0的基址寻址。基址寻址指令举例如下(前索引寻址):LDRR2,R3,#0x0C ;读取R3+0x0C地址上的存储单元的内容,放入R2STRR1,R0,#-4! ;先R0=R0-4,然后把R0的值寄存到保存到R1指定的存储单元基址寻址指令举例如下:LDRR0,R1,#4 ;R0=R1+4,前索引基址寻址LDRR0,R1,#4! ;R0=R1+4,R1=R1+4,前索引基址寻址,!表示要更新基址寄存器LDRR0,R1,#4 ;R0=R1,R1=R14,后索引基址寻址STRR0,R1,R2 ;R1+R2=R06.多寄存器寻址:多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下:LDMIA R1!,R2-R7,R12 ;将R1指向的单元中的数据读出到R2R7、R12中(R1自动加4)STMIA R0!,R2-R7,R12 ;将寄存器R2R7、R12的值保存到R0指向的存储单元中(R0自动加4)7.堆栈寻址:堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出”。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。STMFD SP!,R1-R7,LR ;将R1R7,LR入栈LDMFD SP!,R1-R7,LR ;数据出栈,放入R1R7,LR寄存器8.块拷贝寻址:多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。如:STMIA R0!,R1-R7 ;将R1R7的数据保存到存储器中。存储指针R0在保存第一个值之后增加,增长方向为向上增长STMIB R0!,R1-R7 ;将R1R7的数据保存到存储器中。存储指针R0在保存第一个值之前增加,增长方向为向上增长9.相对寻址:相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下:BL SUBR1 ;调用到SUBR1子程序BEQ LOOP ;条件跳转到LOOP标号处ARM存储器访问指令:加载:LDR RD,addressing ;加载字数据。后缀:B无符号字节;H无符号半字;SB有符号字节;SH有符号半字。存储:STR RD,addressing ;存储字数据。后缀:B字节、H半字。LDR/STR指令用于对内存变量的访问、内存缓冲区数据的访问、查表、外围部件的控制操作等。若使用LDR指令加载数据到PC寄存器,则实现程序跳转功能,这样也就实现了程序散转。数据传送:MOV Rd,operand2 ;数据传送;MVN Rd,operand2 ;数据非传送。后缀:S根据指令结果更新标志N和Z;计算operand2时更新标志C,不影响V。算术运算:ADD Rd,Rn,operand2 ;Rd-Rn+operand2;SUB;RSB ;RdISR-中断服务程序使高优先级任务就绪-低优先级任务释放CPU使用权-高优先级任务。不可剥夺型内核优点:不可剥夺型内核的一个优点是响应中断快。1.在任务级,不可剥夺型内核允许使用不可重入函数。2.每个任务都可以调用非可重入性函数,不必担心其它任务可能正在使用该函数,从而造成数据的破坏。因为每个任务要运行到完成时才释放CPU的控制权。不可剥夺型内核几乎不需要使用信号量保护共享数据。不可剥夺型内核缺点:1.不可剥夺型内核的最大缺陷在于其响应时间。与前后系统一样,不可剥夺型内核的任务级响应时间是不确定的。2.商业软件几乎没有不可剥夺型内核。占先式:1.当系统响应时间很重要时,要使用占先式内核。因此绝大多数商业上销售的实时内核都是占先式内核。2.最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪状态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。3.如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行。图示:低优先级任务-ISR-中断服务程序使高优先级任务就绪-高优先级任务-高优先级任务得到CPU使用权。占先式内核特点:1.使用可剥夺型内核,最高优先级的任务什么时候可以执行,可以得到CPU的控制权是可知的。2.使用可剥夺型内核使得任务级响应时间得以最优化。3.使用可剥夺型内核时,应用程序不应直接使用不可重入型函数。调用不可重入型函数时,要满足互斥条件,这一点可以用互斥型信号量来实现。可重入性(Reentrancy):1.可重入型函数可以被一个以上的任务调用而不必担心数据的破坏。2.可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。3.可重入型函数只使用局部变量,即变量保存在CPU寄存器中或堆栈中。如使用全局变量,则要对全局变量予以保护。可重入代码:可重入的代码指的是一段可以被多个任务同时调用,而不必担心会破坏数据的代码(比如:一个函数)。即:可重入型函数在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会因为在函数中断的时候被其他的任务重新调用,而影响函数中的数据。例:不可重入型函数int Temp;Void swap (int *x,int*y)Temp=*x;*X=*Y;*y=Temp;例:可重入型函数Void swap (int *x,int*y)int Temp;Temp=*x;*X=*Y;*y=Temp; /因参数保存在堆栈中,故函数可被多个任务调用,不必担心各任务调用函数期间会破坏对方的指针。makefile文件:makefile的规则如下:目标:依赖关系 命令目标:.o目标文件,或可执行文件依赖关系:为了生成目标所需要的文件,或其它目标命令:为生成目标需要执行的命令如:hello:hello.oarmv4l-unknown-linux-gcchello.o-ohellomakefile宏:宏的定义:宏名=字符串;宏的使用:$(宏名)。如:cc=armv4l-unknown-linux-gccsrc=f1.c f2.cobj=f1.o f2.oexe=testall:$(obj)$(cc) $(obj) o $(exe)$(obj):$(src)$(cc) c $(src)多线程程序设计:之一:1.在一个无限循环中,用printf函数显示一个整数的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025乌兰察布市第三批次企业人才需求96人笔试历年参考题库附带答案详解
- 2025中国建材所属企业招聘15人笔试历年参考题库附带答案详解
- 2025下半年四川成都成华科技创业投资有限公司招聘投资岗位工作人员1人笔试历年参考题库附带答案详解
- 广东佛山市新质高中联盟2025-2026学年第二学期高一年级期中联考试卷数学学科(含答案)
- 2026年奶茶店水果切配服务合同协议
- 2026年传统戏曲入门课程
- 汽车机械基础课件 平面连杆机构的演化
- 新苏教版三年级数学下册第四单元《垃圾回收与利用》教案
- 2026年高等教育刑法试题及答案
- 2026年详细勘探合同(1篇)
- 绿色生产制度
- 道路附属物拆除施工方案
- 2026年职业病防治培训课件
- 2026北京保障房中心有限公司校园招聘(公共基础知识)测试题带答案解析
- 农产品经纪人岗位招聘考试试卷及答案
- 驾考宝典无人机试题
- 《雄安新区地标美食质量技术规范》
- 2025年中国化学奥林匹克竞赛浙江赛区预赛试题及答案
- 拌合站安全教育培训计划
- 房地产个人销售年度工作总结
- 2025年徐州市中考语文试题卷(含答案及解析)
评论
0/150
提交评论