版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 TMS320C54x软件开发,5.1 软件开发过程及开发工具 5.2 公共目标文件格式 5.3 常用汇编伪指令 5.4 链接器命令文件的编写与使用 5.5 汇编语言程序编写方法 5.6 TMS320C54x C语言编程 5.7 用C语言和汇编语言混合编程,5.1 软件开发过程及开发工具,1建立源程序:用C语言或汇编语言写源程序。 2用C编译器(Compiler)将C语言程序编译为汇编语言程序。 3用汇编器(Assembler)将汇编语言程序汇编成机器语言的目标程序。 4用连接器(Linker)将目标文件连接在一起,产生可执行模块。 5用调试工具对程序进行反复运行、测试和修改,以达到要求
2、。 6用十六进制转换公用程序(Hex Conversion Utility)将可执行目标程序转换成可烧写到EPROM的文件格式,返回首页,图5-1 TMS320C54x DSP软件开发流程,归档器将汇编宏文件收入汇编宏库,归档器将目标文件收入目标文件库,C编译器将C程序编译为汇编语言程序,汇编器将汇编语言程序汇编为COFF格式目标程序,建库程序构建运行时支持库,汇编语言转换程序将代数形式程序转换成汇编语言程序,连接器将COFF目标文件、目标文件库、运行时支持库连接成可执行COFF文件,HEX转换器将可执行COFF文件转换成便于烧写EPROM的HEX或BIN格式文件,EPROM烧写器将程序写入E
3、PROM,上电时自动导入C54X运行,调试工具将C可执行COFF文件通过硬件仿真器下载到C54X中运行,或者下载到软件仿真器中运行,绝对列表器将可执行COFF文件转换成列表文件,给出机器码、助记符、绝对地址等信息,交叉引用列表器列出符号、符号的定义,以及引用情况,供排错使用,表5-1 TMS320C54xV3.50版代码生成工具程序,返回本节,5.2 公共目标文件格式,5.2.1 COFF文件的基本单元段 5.2.2 汇编器对段的处理 5.2.3 链接器对段的处理 5.2.4 重新定位 5.2.5 程序装入 5.2.6 COFF文件中的符号,返回首页,5.2.1 COFF文件的基本单元段,汇编
4、器和连接器建立的目标文件称为公共目标格式文件,即COFF(Common Object File Format)。COFF使模块化编程和管理变得方便和容易,因为用汇编语言编写程序时,是按段来考虑的,所以不同模块中的相同的段很容易汇编在一起。 段(sections)是COFF文件中最重要的概念。一个段就是最终在存储器映象中占据连续空间的一个数据或代码块。目标文件中的每一个段都是相互独立的。一般地,COFF目标文件包含3个缺省的段:text段、data段、bss段,图5-2 目标文件中的段与目标存储器的关系,返回本节,如图5-2所示为目标文件中的段与目标系统中存储器的关系,5.2.2 汇编器对段的处
5、理,1未初始化段 未初始化段主要用来在存储器中保留空间,通常将它们定位到RAM中。这些段在目标文件中没有实际内容,只是保留空间而已。程序可以在运行时利用这些空间建立和存储变量,段可以分为两大类:已初始化段和未初始化段,未初始化段是通过使用.bss和.usect汇编伪指令建立的,两条伪指令的句法分别为: .bss 符号,字数 符号.usect “段名”,字数,bssx,5,x,y . usect “myvar”,6,y,符号指向保留的存储单元的第一个字,2已初始化段 已初始化段包含可执行代码或已初始化数据。这些段的内容存储在目标文件中,加载程序时再放到TMS320C54X存储器中。三个用于建立初
6、始化段的伪指令句法分别为: .text段起点 .data段起点 .sect“段名”,段起点,汇编器在对程序进行汇编时,为程序中的每一个段安排了一个段程序计数器SPC。如:text段、data段、sect段、bss段、usect段分别有自己的段程序计数器,段起点用来为段计数器定义一个起始值。如: .text 10;SPC=10,3命名段 命名段就是程序员自己定义的段,它与缺省的.text、.data和.bss段一样使用,但与缺省段分开汇编。 例如:重复使用.text命令在目标文件中只建立一个.text段,链接后这个.text段作为一个单位分配到存储器中。如果想将一部分程序放到与.text段不同的
7、存储器中,可以使用命名段,将命名段放到与.text段不同的存储器中。 使用命名段可以将已初始化数据放到与.data段不同的存储器中,将未初始化的变量汇编到与bss段不同的存储器中,产生命名段的伪指令为: 符号.usect“段名”,字数 .sect “段名”,段起点,4子段 子段(Subsections)是大段中的小段。链接器可以像处理段一样处理子段。采用子段可以使存储器图更加紧密。子段的命名句法为: 基段名:子段名 例:.sect “.text: _func” ;在text段内建立一个称之为 ; _func的子段。 子段也有两种,用.sect命令建立的是已初始化段,用.usect命令建立的是未
8、初始化段,5段程序计数器(SPC) 汇编器为每个段安排一个独立的程序计数器,即段程序计数器(SPC)。SPC表示一个程序代码段或数据段内的当前地址。 开始时,汇编器将每个SPC置0,当汇编器将程序代码或数据加到一个段内时,相应的SPC增加。 如果汇编器再次遇到相同段名的段,继续汇编至相应的段,且相应的SPC在先前的基础上继续增加,例5-1 段命令应用举例: 2 * * * * * * * * * * * * * * * * * * * * * * * * * * 3 * Assemble an initialized table into .data * 4 * * * * * * * * *
9、 * * * * * * * * * * * * * * * * * 5 0000 .data 6 0000 0011 coeff .word 011h,022h,033h 0001 0022 0002 0033 7 * * * * * * * * * * * * * * * * * * * * * * * * * * 8 * * Reserve space in .bss for a variable * * 9 * * * * * * * * * * * * * * * * * * * * * * * * * * 10 0000 .bss buffer,10 11 * * * * * *
10、* * * * * * * * * * * * * * * * * * * * 12 * * still in .data * * 13 * * * * * * * * * * * * * * * * * * * * * * * * * * 14 0003 0123 ptr .word 0123h,行号,段计数器,机器码,汇编指令,15 * * * * * * * * * * * * * * * * * * * * * * * * * * 16 * * Assemble code into the .text section * * 17 * * * * * * * * * * * * * *
11、 * * * * * * * * * * * * 18 0000 .text 19 0000 100f add: LD 0Fh,A 20 0001 f010 aloop: SUB #1,A 0002 0001 21 0003 f842 BC aloop,AGEQ 0004 0001 22 * * * * * * * * * * * * * * * * * * * * * * * * * * 23 * * Another initialized table into .data * * 24 * * * * * * * * * * * * * * * * * * * * * * * * * *
12、25 0004 .data 26 0004 00aa ivals .word 0Aah,0BBh,0CCh 0005 00bb 0006 00cc,27 * * * * * * * * * * * * * * * * * * * * * * * * * * * * Define another section for more variables * * * * * * * * * * * * * * * * * * * * * * * * * * * * 30 0000 var2 .usect “newvars”,1 31 0001 inbuf .usect “newvars”,7 32 *
13、 * * * * * * * * * * * * * * * * * * * * * * * * * 33 * * Assemble more code into .text * * 34 * * * * * * * * * * * * * * * * * * * * * * * * * * 35 0005 .text 0005 110a mpy: LD 0Ah,B 0006 f166 mloop: MPY #0Ah,B 0007 000a 0008 f868 BC mloop,BNOV 0009 0006 * * * * * * * * * * * * * * * * * * * * * *
14、 * * * * * * Define a named section for int. vectors * * * * * * * * * * * * * * * * * * * * * * * * * * * * 0000 .sect “vectors” 0000 0011 .word 011h,033h 0001 0033,图5-3 例5-1产生的目标代码,返回本节,在此例中,一共建立了5个段: .text 段内有10个字的程序 代码。 .data 段内有7个字的数据。 vectors是一个用.sect建立的自定义段,段内有2个字的已初始化数据。 .bss 在存储器中为变量保 留10个存
15、储单元。 newvars是一个用.usect命令 建立的自定义段,它 在存储器中为变量保 留8个存储单元,5.2.3 链接器对段的处理,链接器对段的处理有两个功能。 首先,它将汇编器产生的COFF目标文件(.obj文件)中的各种段作为输入段,当有多个文件进行链接时,它将输入段组合起来,在可执行的COFF输出模块中建立各个输出段。 其次,链接器为输出段选择存储器地址,链接器有两个命令完成上述功能,即: MEMORY 命令定义目标系统的存储器配置图,包括对存储器各部分的命名,以及规定它们的起始地址和长度。 SECTIONS命令告诉链接器如何将输入段组合成输出段,以及在存储器何处存放输出段。子段可以
16、用来更精确地编排段,可用链接器SECTIONS命令指定子段,图5-4 链接器默认的存储器分配,返回本节,5.2.4 重新定位,1链接时重新定位 汇编器将每个段的起始地址处理为0,而所有需要重新定位的符号(标号)在段内都是相对于0地址的,但在存储器中不可能所有的段都从0地址开始,所以需要通过以下方法将段重新定位: 将各个段定位到存储器中,每个段都从合适的地址开始。 将符号值调整到相对于新的段地址的数值。 调整对重新定位后符号的引用,例5-2 产生重定位入口的一段程序(列表文件)代码。 1 .ref X ;在别的文件中定义,在此引用 2 .ref Z ; 在别的文件中定义,在此引用 3 0000
17、.text 4 0000 F073 B Y ;生成一个重定位入口 0001 0006 5 0002 F073 B Z ; 生成一个重定位入口 0003 0000! 6 0004 F020 LD #X,A ;生成一个重定位入口 0005 0000! 7 0006 F7E0 Y: RESET,未定义的外部引用 .text段重定位 ” .data段重定位,.sect段重定位 - .bss段和.usect段重定位,假设链接时X重新定位在地址7100h,.text段重新定位到从地址7200h开始,那么Y的重定位值为7206h。链接器利用两个重定位入口,对目标文件中的两次引用进行修正: f073 B Y
18、变成 f073 0006 7206 f020 LD #X,A 变成 f020 0000! 7100 在COFF目标文件中有一张重定位入口表。链接器对符号重定位时,利用这些入口修正对符号的引用。链接器在处理完之后就将重定位入口消去,以防止在重新链接或加载时再次重新定位,2运行时重新定位 将代码装入存储器的一个地方,而运行在另一个地方。利用SECTIONS命令选项让链接器定位两次。一些关键的执行代码必须装入在系统的ROM中,但希望在较快的RAM中运行。 链接器提供了一个简单的处理该问题的方法。利用SECTIONS命令选项让链接器定位两次。第一次使用装入关键字设置装入地址,再用运行关键字设置运行地址
19、,返回本节,5.2.5 程序装入,为了运行程序,要将可执行程序装入目标存储器。方法: (1)硬件仿真器和CCS集成开发环境,具有内部的装入器,调用装入器的LOAD命令即可装入可执行程序。 (2)将代码固化在片外存储器中,采用Hex转换工具(Hex conversion utility),例如Hex500将可执行的COFF目标模块(.out文件)转换成几种其他目标格式文件,然后将转换后的文件用编程器将代码写入EPROM/Flash,返回本节,5.2.6 COFF文件中的符号,COFF文件中有一个符号表,用于存储程序中的符号信息。链接器对符号重定位时使用该表,调试工具也使用该表来提供符号调试。 外
20、部符号指在一个模块中定义,在另一个模块中使用的符号。可使用.def、.ref或.global汇编伪指令将符号定义为外部符号。.def在当前模块中定义,可以在别的模块中使用的符号;.ref在当前模块中引用,但在别的模块中定义的符号;.global可用于以上任何一种情况,x: ADD #56h,A ;定义x B y ;引用y .def x ;x在此模块中定义, ;可被别的模块引用 .ref y ;y在这里引用, ;它在别的模块中定义,返回本节,5.3 常用汇编伪指令,返回首页,1段定义伪指令 为便于链接器将程序、数据分段定位于指定的(物理存在的)存储器空间,并将不同的obj文件链接起来,设计中常将
21、程序、数据、变量分段定义。段的使用非常灵活,但常用以下约定: .text 此段存放程序代码。 .data 此段存放初始化了的数据。 .bss 此段存入未初始化的变量。 .sect 名称 定义一个有名称段,放初始化了的数据或程序代码。 符号 .usect 名称,字数 定义一个有名称段,放未初始化的数据,2条件汇编伪指令 .if、.elseif、.else、.endif伪指令告诉汇编器按照表达式的计算结果对代码块进行条件汇编。 .if expression 标志条件块的开始,仅当条件为真(expression的值非0即为真)时汇编代码。 .elseif expression 标志若.if条件为假,
22、而.elseif条件为真时要汇编代码块。 .else 标志若.if条件为假时要汇编代码块。 .endif 标志条件块的结束,并终止该条件代码块,3引用其他文件和初始化常数伪指令 .include 文件名 将指定文件复制到当前位置,其内容可以是程序、数据、符号定义等。 .copy 文件名 与.include类似。 .def 符号名 在当前文件中定义一个符号,可以被其他文件使用。 .ref 符号名 在其他文件中定义,可以在本文件中使用的符号。 .global 符号名 其作用相当于.def、.ref效果之和,mmregs 定义存储器映射寄存器的符号名,这样就可以用AR0、PMST等助记符替换实际的存
23、储器地址。 .float 数1,数2 指定的各浮点数连续放置到存储器中(从当前段指针开始)。 .word 数1,数2 指定的各数(十六进制)连续放置到存储器中。 .space n 以位为单位,空出n位存储空间。 .end 程序块结束。 .set定义符号常量,如:K .set 256,4宏定义和宏调用 TMS320C54x汇编支持宏语言。如果程序中需要多次执行某段程序,可以把这段程序定义(宏定义)为一个宏,然后在需要重复执行这段程序的地方调用这条宏。 宏定义如下: Macname .macroparameter 1,parameter n .mexit .endm,例5-4 宏定义、宏调用和宏展
24、开的一个例子。 1 * 2 3 * add3 4 * 5 * ADDRP=P1+P2+P3 ;说明宏功能 6 7 add3 .macro p1,p2,p3,ADDRP ;定义宏 8 9 LD p1,A ;将参数1赋给A 10 ADD p2,A ;将参数2与A相加 11 ADD p3,A ;将参数3与A相加 12 STL A,ADDRP ;将结果A的低字存参数4 13 .endm ;结束宏 14 15 16 .global abc,def,ghi,adr ;定义全局符号 17 18 000000 add3 abc,def,ghi,adr ;调用宏 1 1 000000 1000! LD abc,
25、A ;宏展开 1 000001 0000! ADD def,A 1 000002 0000! ADD ghi,A 1 000003 8000! STL A,adr,返回本节,5.4 链接器命令文件的编写与使用,5.4.1 MEMORY伪指令及其使用 5.4.2 SECTIONS伪指令及其使用,返回首页,1)将有多个选项的命令,写成一个链接器命令文件.cmd。 (2)进行存储器分配 (3)运行链接器命令文件.cmd,生成一个映象文件.map和一个可执行的输出文件.out,主 要 功 能,1)输入文件名,就是要链接的目标文件和文档库文件,或者是其它的命令文件。如果要调用另一个命令文件作为输入文件,
26、此句一定要放在本命令文件的最后,因为链接器不能从新调用的命令文件返回。 (2)链接器选项。这些选项既可以用在链接器命令行,也可以编在命令文件中。 (3)MEMORY和SECTIONS都是链接器命令。如果链接命令文件中没有MEMORY和SECTIONS命令(默认情况),则链接器就从地址0080h一个段接着一个段进行配置。 (4)注释的内容应当用/*和*/符号括起来,例5-5 链接器命令文件举例。 a.obj b.obj /* 输入文件名 */ -o prog.out /* 选项 */ -m prog.map /* 选项 */ MEMORY /* MEMORY 命令 */ PAGE0: ROM:
27、origin=1000h, length=0100h PAGE1: RAM: origin=0100h, length=0100h SECTIONS /* SECTIONS 命令 */ .text: ROM .data: ROM .bss: RAM,返回本节,5.4.1 MEMORY伪指令及其使用,MEMORY命令用来定义目标系统中所包含的各种存储器的存储器配置图,包括对存储器各部分命名,以及规定它们的起始地址和长度,定义系统,MEMEORY PAGE0: name1 (attr): origin=constant, length=constant PAGEn: namen (attr): o
28、rigin=constant, length=constant,对一个存储空间加以标记,每一个PAGE代表一个完全独立的地址空间。页号n最多可规定为255,取决于目标存储器的配置。通常PAGE 0定为程序存储器,PAGE 1定为数据存储器。如果没有规定PAGE,则链接器将目标存储器配置在PAGE 0,存储区间的名字可以包含8个字符,AZ、az、$、.、_均可。名字并没有特殊的含义,用来标记存储器的区间而已;名字都是内部记号,不需要保留在输出文件或者符号表中。不同PAGE上的存储器区间可以取相同的名字,但在同一PAGE内的名字不能相同,且不许重叠配置,R 规定可以对存储器执行读操作。 W 规定可
29、以对存储器执行写操作。 X 规定存储器可以装入可执行的程序代码。 I 规定可以对存储器进行初始化。 以上属性可以在将输出段定位到存储器时加以限制。 如果一项属性都没有选,就可以将输出段不受限制地定位到任何一个存储器位置。任何一个没有规定属性的存储器都默认有全部4项属性,规定一个存储区的起始地址。键入origin、org或o都可以。这个值是一个16位二进制常数,可以用十进制数、八进制数或十六进制数表示,规定一个存储区的长度,键入length、len或l都可以,返回本节,fill:任选项,指定存储区的填充指,为没有定位输出段的存储器空单元填充一个数,键入fill或f均可。这是2个字节的整型常数,可
30、以是十进制数、八进制数或十六进制数表示。如fill=0FFFFh,5.4.2 SECTIONS伪指令及其使用,SECTIONS伪指令功能如下: 说明如何将输入段组合成输出段。 在可执行程序中定义输出段。 指定输出段在存储器中存放的位置。 允许对输出段重新命名,SECTIONS伪指令的一般语法为: SECTIONS name:property,property,property . name:property,property,property . name:property,property,property .,例5-6 SECTIONS命令的使用方法。 file1.obj file2.ob
31、j /* Input files */ -o prog.out /* Options */ SECTIONS .text: load=ROM, run=800h .const: load=ROM .bss: load=RAM .vectors: load=FF80h t1.obj(.intvec1) t2.obj(.intvec2) .data: align=16,图5-5 例5-6中段的定位,返回本节,5.5 汇编语言程序编写方法,5.5.1 汇编语言源程序格式 5.5.2 汇编语言中的常数和字符串 5.5.3 汇编源程序中的符号 5.5.4 汇编源程序中的表达式,返回首页,5.5.1 汇编
32、语言源程序格式,助记符指令一般包含4个部分,其一般组成形式为: 标号: 助记符 操作数 ;注释 1标号区 所有汇编指令和大多数汇编伪指令前面都可以带有标号,标号可以长达32个字符,由AZ、az、09、_、和$符号组成,且第一个字符不能是数字,区分大小写,2助记符区 助记符区不能从第一列开始,否则被认为是标号。 3操作数区 操作数区是一个操作数列表,可以是常数、符号或常数与符号构成的表达式。操作数间需用“,”号隔开。 4注释区 注释区可以从任何一列开始,可以包含ASCII字符和空格,返回本节,5.5.2 汇编语言中的常数和字符串,表5-3 COFF常数与字符串,返回本节,5.5.3 汇编源程序中
33、的符号,1标号:与程序中的位置有关的符号地址。 2局部标号:特殊的标号,其使用范围和影响是临时的。 3符号常数:用一个有意义的符号名代表一个常数。 4先定义的符号常数:汇编器预先定义的符号。$,AR0-AR7。 5替代符号:用.asg将一个字符串赋给替代符号,当汇编器遇到替代符号时,就用它的字符串值替代它,Label1:LD ADDRA,A SUB ADDRB,A BC $1,ALT LD ADDRB,A B $2 $1: LD ADDRA,A $2: ADD ADDRC,A .newblock BC $1,ALT STL A,ADDRC $1: NOP,局部标号 $代表段程序计数器的当前值,
34、K.set1024 maxbuf.set2*K value .set 0 delta .set 1,asg“*+”,INC .asg“*-”,DEC .asg“10,20,30,40”,coefficients .bytecoefficients,符号常数,替代符号,返回本节,5.5.4 汇编源程序中的表达式,表达式可以是常数、符号或由算术运算符结合的常数和符号。表达式值的有效范围为 -3276832767。 1运算符(表5-4 所示) 2合格的表达式(表5-5所示,表5-4 可以用在表达式中的运算符,表5-5 带有绝对符号、可重定位符号的表达式,data label1.word0,1,2 l
35、abel2.word3 X.set50 goodsym1.set100h+X; goodsym2.set$; goodsym3.setlabel1; goodsym4.setlabel2-label1,因为X的值在引用之前已定义,合格表达式,对前面定义的所有局部标号的所有引用,包括当前的SPC( $ )都是合格的,两个局部标号不是绝对符号,但相同的段内,它们的差是绝对的,globalextern_1;在外部模块定义 intern_1:.word”D;在当前模块定义,可重定位 LAB1:.set2;LAB1=2,绝对符号 intern_2:.wordAB;在当前模块定义,可重定位,LD#LAB1
36、+(4+3)*7),A;2+(4+3)*7)=51-A LD#LAB1+4+(3*7),A;2+4+(3*7)=27-A,LDextern_1-10,B; 合法 LD10-extern_1,B;非法,不能将可重定位符号变负 LD-(intern_1),B ;非法,不能将可重定位符号变负 LDextern_1/10,B ;非法,不能将可重定位符号进行乘除 LDintern_1+extern_1,B;非法,LDintern_1-intern_2+extern_1,B; 合法 LDintern_1+intern_2+extern_1,B;非法,intern_1+intern_2不 是绝对值 LDin
37、tern_1+extern_1-intern_2,B ;非法,汇编器先计算 intern_1+extern_1,返回本节,5.6 TMS320C54x C语言编程,5.6.1 存储器模式 5.6.2 寄存器规则 5.6.3 函数调用规则 5.6.4 中断处理 5.6.5 表达式分析,返回首页,5.6.1 存储器模式,1段 C54x将存储器处理为程序存储器和数据存储器两个线性块。程序存储器包含可执行代码;数据存储器主要包含外部变量、静态变量和系统堆栈。编译器的任务是产生可重定位的代码,允许链接器将代码和数据定位进合适的存储空间。C编译器对C语言编译后除了生成3个基本段,即.text、.data、
38、.bss外,还生成.cinit、.const、.stack、.sysmem段,2C/C+系统堆栈 .stack不同于DSP汇编指令定义的堆栈。DSP汇编程序中要将堆栈指针SP指向一块RAM,用于保存中断、调用时的返回地址,存放PUSH指令的压栈内容。 .stack定义的系统堆栈实现的功能是保护函数的返回地址,分配局部变量,在调用函数时用于传递参数,保护临时结果。 .stack定义的段大小(堆栈大小)可用链接器选项-stack size设定,链接器还产生一个全局符号_ _STACK_SIZE,并赋给它等于堆栈长度的值,以字为单位,缺省值为1K,3存储器分配 (1)运行时间支持函数。 rts.li
39、b (2)动态存储器分配。 malloc calloc (3)静态和全局变量的存储器分配。 (4)位域/结构的对准,返回本节,5.6.2 寄存器规则,寄存器规则明确了编译器如何使用寄存器以及在函数调用过程中如何保护寄存器。 (1)辅助寄存器 AR1,AR6,AR7;AR0,AR2,AR3,AR4,AR5 (2)堆栈指针SP (3)ARP (4)在默认情况下,编译器总是假定ST1中的OVM在硬件复位时被清0。若在汇编代码中对OVM置位为1,返回到C环境时必须复位。 (5)寄存器变量,返回本节,5.6.3 函数调用规则,1)局部帧的产生 (2)参数传递 (3)函数的返回,返回本节,5.6.4 中断处理,1)中断的使能和屏蔽必须由程序员自己来设置。 (2)中断程序没有参数传递,即使说明,也会被忽略 (3)中断处理程序不能被正常的C程序调用。 (4)为了使中断程序与中断一致,在相应的中断矢量中必须放置一条转移指令,可以用.sect汇编伪指令建立一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八年级地理(难点突破)2027年上学期期末考核卷
- 2025-2026年四年级科学(考点过关)下学期期末测试卷
- 2025年大学建筑装饰(装饰设计原理)试题及答案
- 2026年土木工程(混凝土结构)考题及答案
- 高职第一学年(动物医学)动物临床诊疗2026年综合测试题及答案
- 五年级科学(综合探究)2027年下学期期中测评卷
- 2025年高职风电系统运行与维护(风机调试)期末试题
- 2026年用户体验设计流程与方法(标准制定)考题及答案
- 2025年高职生态保护技术(土壤修复实操)试题及答案
- 2025年大学公共项目管理(公共项目管理)试题及答案
- 2025年法律职业伦理历年试题及答案
- 大学生心理健康论文情绪管理
- 学术报告厅舞台灯光音响系统项目工程施工技术方案及技术措施
- JG/T 255-2020内置遮阳中空玻璃制品
- JG/T 254-2015建筑用遮阳软卷帘
- TCNFPIA1003-2022采暖用人造板及其制品中甲醛释放限量
- 大健康产业可行性研究报告
- 肠易激综合征中西医结合诊疗专家共识(2025)解读课件
- 库存周转率提升计划
- 护理部竞聘副主任
- 《统计学-基于Excel》(第 4 版)课件 贾俊平 第5-9章 概率分布- 时间序列分析和预测
评论
0/150
提交评论