DSP第4章程序开发课件.ppt

上传人:飞****2 文档编号:79005913 上传时间:2023-03-19 格式:PPT 页数:96 大小:423KB
返回 下载 相关 举报
DSP第4章程序开发课件.ppt_第1页
第1页 / 共96页
DSP第4章程序开发课件.ppt_第2页
第2页 / 共96页
点击查看更多>>
资源描述

《DSP第4章程序开发课件.ppt》由会员分享,可在线阅读,更多相关《DSP第4章程序开发课件.ppt(96页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第四章第四章 DSP软件开发软件开发软件开发过程n一个DSP软件可以使用汇编或C语言编写源程序,通过编译、连接工具产生DSP的执行代码。n在调试阶段,可以利用软仿真(Simalator)在计算机上运行;也可以利用硬件调试工具(xps510)将代码下载到DSP中,并通过计算机监控、调试该程序。当调试完成后,可以将程序代码固化到EPROM中,以便DSP目标系统脱离计算机单独运行。代码生成工具:代码生成工具:1.C编译器(C Compiler):将C源程序代码编译成为C54x汇编语言源代码程序。在编译软件包中包括一个外壳程序(Shell program)、一个优化器(Optimizer)和一个内部列

2、表公用程序(Interlist utility)。其中,外壳程序能自动编译、汇编、连接源模块。优化器能改进代码来提高C程序的效率。内部列表公用程序能将C源程序同汇编语言输出相结合。2.汇编器(Assembler):将汇编语言源文件转变为基于公用目标文件格式(COFF)的机器语言目标文件。源文件中包括指令、汇编命令以及宏命令。汇编器的输入文件为汇编语言源文件,其默认的文件扩展名为.asm。由汇编器所建立的目标文件的默认扩展名为.obj。由汇编器建立的列表文件的默认扩展名为.lst。3.连接器(Linker):将汇编生成的、可重新定位的COFF目标模块组合成一个可执行的COFF目标模块。连接器的输

3、入是可重新定位的COFF目标文件和目标库文件。当连接器生成可执行模块时,它要调整对符号的引用,并解决外部引用的问题。它也可以接受来自文档管理器中的目标文件,以及连接以前运行时所生成的输出模块。4.文档管理器(Archiver):将一组文件(包括源文件或目标文件)集中归入一个文档文件库。利用文档管理器,可以方便地替换、添加、删除和提取文件来调整库,其最有用的应用之一是建立目标文件库,C编译器自带有目标文件库。汇编时,可以搜索宏文件库,并通过源文件中的宏命令来调用。例如:将若干宏归入一个宏库,汇编器搜索这个库,并调用源文件中使用的宏。5.助记符到代数式指令翻译器(Mnemonic-to-algbr

4、aic translator utility):将包含助记符指令的汇编语言源文件转换成包含代数指令的汇编语言源文件。6.运行支持库公用程序(Runtime-suport utility):建立用户的C语言运行支持库。标准运行支持库在rts.src里提供源代码,在rts.lib里提供目标代码。包含ANSI标准运行支持函数、编译器公用程序函数、浮点算术函数和被C54x编译器支持的C输入/输出函数。7.建库实用程序(Library-build utility):用来建立用户自己的、C语言编写的支持运行的库函数。链接时,用rts.src中的源文件代码和rts.lib中的目标代码提供标准的支持运行的库函

5、数。8.十六进制转换程序(Hex conversion utlity):可以很方便地将COFF目标文件转换成TI、Intel、Motorola或Tektronix公司的目标文件格式。转换后生成的文件可以下载到EPROM编程器,以便对用户的EPROM进行编程。9.绝对制表程序(Absolute lister):将链接后的目标文件作为输入,生成.abs输出文件。对.abs文件汇编产生包含绝对地址而不是相对地址的清单。如果没有绝对制表程序,所生成清单可能是冗长的,并要求进行许多人工操作。10.交叉引用制表程序(Cross-reference lister):利用目标文件生成一个交叉引用清单,列出所链

6、接的源文件中的符号以及它们的定义和引用情况。11.C54x调试器:接收可执行的COFF文件作为输入,但大多可擦除存储器却不支持COFF文件。汇编语言程序的编写方法汇编语言程序的编写方法 要点要点以以.asm.asm为扩为扩展名展名每一行由每一行由4 4个部分个部分组组成成 格式格式 标号标号:空格空格 助记符助记符 空格空格 操作数操作数 空格空格 ;注释;注释 中的内容为可选择部分 供本程序的其它部分或其它程序调用。标号是任选项,标号后面可以加也可以不加冒号“:”。在编写汇编语句时,应遵循以下规则:在编写汇编语句时,应遵循以下规则:语句的开头只能是标号、空格、星号或分语句的开头只能是标号、空

7、格、星号或分号。号。标标号号是是可可选选项项;如如果果使使用用,必必须须从从第第一一列列开始。开始。每每个个域域必必须须由由一一个个或或多多个个空空格格来来分分开开。制制表符等同于空格。表符等同于空格。注注释释是是可可选选项项。开开始始于于第第一一列列的的注注释释用用星星号号或或分分号号(*或或;)来来标标明明,开开始始于于其其它它列的注释必须由分号开头。列的注释必须由分号开头。要点要点建议建议 标号标号:空格空格 助记符助记符 空格空格 操作数操作数 空格空格 ;注释;注释 可以是助记符指令、汇编指令、宏可以是助记符指令、汇编指令、宏指令和宏调用命令。指令和宏调用命令。1.1.助助记记符指令

8、,一般用大写;符指令,一般用大写;2.2.汇编汇编命令和宏命令,以句号命令和宏命令,以句号“.”“.”开始,且开始,且为为通常用小写。通常用小写。要点要点 标号标号:空格空格 助记符助记符 空格空格 操作数操作数 空格空格 ;注释;注释 1.1.指令中的操作数或汇指令中的操作数或汇编命令中定义的内容编命令中定义的内容 2.2.操作数之间必须用逗操作数之间必须用逗号号“,”分开。分开。1.1.从分号从分号“;”开始开始 2.2.可以放在指令或汇编命令后面,可以放在指令或汇编命令后面,也可以放在单独的一行或数行。也可以放在单独的一行或数行。要点要点 汇编语言程序中的数据型式有下列几种:二进制:如1

9、110001b或1111001B;八进制:226q或572Q;十进制:1234或+1234或-1234(缺省型)十六进制:0A40h或0A40H或0 xA40 浮点数:1.623e-23(仅C语言程序中能用,汇编程序不能用)字符:D 字符串:“this is a string”汇编器和链接器建立的目标文件,是一个可以TMS320C54x器件上执行的文件。这些目标文件的格式称之为公共目标文件格 式,即 COFF(Common Object File Format)。COFF会使模块编程和管理变得更加方便,因为当编写一个汇编语言程序时,它可以按照代码和数据段来考虑问题。汇编器和链接器都有一些命令建

10、立并管理各种各样的段。公共目标文件格式公共目标文件格式 COFF COFF建建立立公公共共目目标标文文件件格式格式的的目目标标文件文件汇编汇编器器和和链链接器接器功能功能的异同的异同相同点相同点不同点不同点汇汇编编器器建建立立的的是是相相对对地地址址COFFCOFF文文件件,即即.obj.obj文件文件链链接接器器建建立立的的是是绝绝对对地地址址COFFCOFF文文件件,即即.out.out文件文件汇编器根据汇编命令用适当的段将各部分汇编器根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文件;程序代码和数据连在一起,构成目标文件;链接器的一个任务就是分配存储单元,即链接器的一个任

11、务就是分配存储单元,即把各个段重新定位到目标存储器中。把各个段重新定位到目标存储器中。不同种类的区别不同种类的区别COFFCOFF文件种文件种类类 C54x汇汇编编器器和和C编编译译器器建建立立的的是是COFF2文文件件。C54x能能够够读读/写写所所有有形形式式的的COFF文文件件,缺缺省省值值下下链链接接器器生生成成的的是是COFF2文文件件,用用链链接接器器vn选选项项可以选择不同形式的可以选择不同形式的COFF文件。文件。COFF0COFF0COFF1COFF1COFF2COFF2 标题标题格式不相同格式不相同数据部分是相同数据部分是相同汇编指令n汇编指令(伪指令)是用来为程序提供数据

12、和控制汇编进程的。C54x汇编器共有64条汇编命令。将代码和数据汇编到特定的段中。为未初始化的变量保留存储器空间。控制展开列表的形式。存储器初始化。汇编条件块。定义全局变量。n(1)段定义指令 .bass 在.bass段中为未初始化的变量保留存储器空间 .date 确认.bass段中的代码段。.bass段中通常包含了初始化的数据。.sect 定义初始化的带命名的段,并将紧接着的代码或数据并入该段。.text 该段中包含了可执行的代码 .usect 在一个未初始化的有命名的段中保留空间n(2)常数初始化指令 .bes和.space 在当前段保留确定数目的位。当在.space 段使用了标号时,它指

13、向保留位的第一个字;当在.bes 段使用了标号时,它指向保留位的最后一个字。.byte 把一个8位值放入当前段的连续字中。.filed 把一个数放入当前字的特定数目的位中。.float和.xloat 计算以IEEE格式表示的单精度(32位)浮点数,并存放在当前段的连续字中,高位字先存。.int和.word 把一个或多个16位数存放在当前段的连续字中。.long和.xlong 把32位数存放在当前段的连续的两个字中,高位字先存。.string和.pstring 把8位的字符从一个或多个字符串中传到当前段中。n(3)段程序计数器定位指令 .align 使SPC对准1-word到128-word的边

14、界。保证了紧接着该指令的代码从一个整字或页边界开始。操作数:1 让SPC对准字边界 2 让SPC对准长字/偶地址边界 128 让SPC对准页边界 不带操作数时,确省值为128。n(4)输出列表格式指令 .drlist/.drnolist .fclist/.fcnolist .length .width .list/.nolist .mlist/.mnolist .option .page .title .sslist/.ssnolistn(5)引用其他文件的指令 .copy/.include 告诉汇编器器开始从其他文件中读源语言。.def 确认一个在当前模块中定义的且被其他模块使用的符号。.g

15、lobal 声明一个外部符号,使其他模块在连接的时候可以使用它。.mlib 向汇编器提供一个包含宏定义的文档库的名称。.ref 确认一个在当前段中使用但在其它段中定义的符号。n(6)条件汇编指令 .if/.elseif/.else/.endif 告诉汇编器根据表达式的值条件汇编一块代码。.loop/.break/.endloop 告诉汇编器按照表达式的值循环汇编一块代码。.loop expression 标注一块循环代码的开始。.break expression 告诉汇编器当表达式为假时,继续循环汇编;当表达式为真时,立即转到.endloop 后面懂得代码去。n(7)汇编时的符号指令 使有意义

16、的符号名与常数值或字符串相等同。.asg 规定一个字符串与一个替代符号相等,并将其存放在替代符号表中。.eval 计算一个表达式的值并把结果传送到与一个替代符号等同的字符串中。.label 定义一个专门的符号以表示当前段内装入时的地址而不是运行时的地址。.set/.equ 把一个常数值等效成一个符号,存放在符号表中且不能被清除。n(8)其他方面的汇编指令 .algebraic .end .mmregs .newblock .sblock .version 汇编程序的编辑与汇编和链接汇编程序的编辑与汇编和链接 汇编语言源程序编好后,必须经过汇编和链接才能运行。汇编语汇编语言程序的言程序的汇编汇编

17、汇编语汇编语言源程序要素言源程序要素 汇编命令汇编命令助记符指令助记符指令 宏命令宏命令汇编汇编程序(程序(汇编汇编器)功能器)功能 将源程序汇编成可重定位的目标文件(将源程序汇编成可重定位的目标文件(.obj.obj文件);文件);如果需要,可以生成一个列表文件(如果需要,可以生成一个列表文件(.lst.lst文件);文件);将程序代码分段,每段的目标代码都有一个将程序代码分段,每段的目标代码都有一个SPCSPC管理;管理;定义和引用全局符号,可在列表后附加交叉引用表;定义和引用全局符号,可在列表后附加交叉引用表;对条件程序块进行汇编;对条件程序块进行汇编;支持宏功能,允许定义宏命令。支持宏

18、功能,允许定义宏命令。段(段(sectionssections)的概念)的概念 特点特点定义定义 分分段段的的优优点点:在在目目标标文文件件中中将将放放置置程程序序、数数据据、变变量量的的代代码码分分开开,便便于于在在链链接接时时作作为为一一个个单单独独的的部部分分分分配配存存储储器器。由由于于大大多多数数系系统统都都有有好好几几种种形形式式的的存存储储器器,通通过过对对各各个个段段重重新新定定位位,可可以以使使目目标存储器得到更为有效的利用。标存储器得到更为有效的利用。段段是是在在存存储储器器图图中中占占据据相相邻邻空空间间的代的代码码或数据或数据块块。一一个个目目标标文文件件中中的的每每一

19、一个个段都是分开的和不相同的。段都是分开的和不相同的。目标文件中的段与目标存目标文件中的段与目标存储器之间的关系储器之间的关系n所谓段,就是在存储器图中占据相邻空间的代码或数据块。一个目标文件中的每一个段都是分开的和不相同的。所有的COFF目标文件都包含以下3种形式的段:.text 段(此段通常包含可执行代码).data 段(此段通常包含初始化数据).bss 段(此段通常为未初始化变量保留存储空间)此外,汇编器和链接器可以建立、命名和链接自定义段。这种自定义段是程序员自己定义的段,使用起来与.data、.text以及.bss段类似。它的好处是在目标文件中与.data、.text以及.bss 分

20、开汇编,链接时作为一个单独的部分分配到存储器。段有两类:(1)未初始化段:.bss和.usect命令建立未初始化段。未初始化段就是C54x存储器中的保留空间,通常将它们定位到RAM区。在目标文件中,这些段中没有确切的内容;在程序运行时,可以利用这些存储空间存放变量。这两条命令的句法为:.bss 符号,字数 符号 .usect “段名”,字数其中:符号:对应于保留的存储空间第一个字的变量名称。这个符号可以让其它段引用,也可以用.global命令定义为全局符号。字数:表示在.bss段或标有名字的段中保留多少个存储单元。段名:程序员为自定义未初始化段起的名字。(2)已初始化段:.text、.data

21、的.sect命令建立已初始化段。已初始化段中包含有可执行代码或初始化数据。这些段中的内容都在目标文件中,当加载程序时再放到C54x的存储器中。每一个已初始化段是可以重新定位的,并且可以引用其它段中所定义的符号。链接器在连接时会自动地处理段间的相互引用。这3条初始化命令的句法为:.text 段起点 .data 段起点 .sect “段名”,段起点 其中,段起点是任选项,如果选用,它就是为段程序计数器(SPC)定义的一个起始值。SPC值只能定义一次,而且必须在第一次遇到这个段时定义。如果缺省,则SPC从0开始。段的构成要经过一个反复过程。例如,当汇编器第一次遇到.data命令时,这个.data段是

22、空的。接着将紧跟其后的语句汇编到.data段,直到汇编器遇到一条.text或.sect命令。如果汇编器再遇到一个.data段,它就将紧跟这条命令的语句汇编后加到已经存在的.data中。这样,就建立了单一的.data段,段内数据都是连续地安排到存储器中的。子段:子段是大段中的小段。链接器可以像处理段一样处理子段。采用子段结构,可以使存储器图更加紧密。子段命名的句法为:基段名:子段名 对于子段,可以单独为其分配存储单元,或者在相同的基段名下与其它段组合在一起。例如,若要在.text段内建立一个称之为_func的子段,可以用如下的命令:.sect “.text:_func”段程序计数器(SPC):汇

23、编器为每个段都安排了一个单独的程序计数器,即段程序计数器(SPC)。SPC表示一个程序代码段或数据段内的当前地址。一开始,汇编器将每个SPC置0。当汇编器将程序代码或数据加到一个段内时,相应的SPC就增加。如果再继续对某个段汇编,则相应的SPC就在先前的数值上继续增加。链接器在链接时要对每个段进行重新定位。1 1运行汇编程序运行汇编程序 axm500 input fileobject filelisting file-options汇编汇编器是名器是名为为asm500.exeasm500.exe的可的可执执行程序行程序 例如例如 axm500 cjy.asm -l -s -x源源程程序序cjy

24、.asm经经汇汇编编后后将将生生成成一一个个cjy.objobj目目标标文文件件、列列表表文文件件、符符号号表表(在在目目标标文文件件中中)以以及及交交叉引用表(在列表文件中)。叉引用表(在列表文件中)。2 2列表文件列表文件 TMS320C54x COFF Assembler Version 3.70 Tue Oct 19 12:42:59 2004Copyright(c)1996-2001 Texas Instruments Incorporatedexample.asm PAGE 1 1 *2 *example.asm y=a1*x1+a2*x2+a3*x3+a4*x4 *3 *5 .m

25、mregs ;定义存储器映象寄存器定义存储器映象寄存器 6 000000 STACK .usect STACK,10h ;分配分配10个单元的堆栈空间个单元的堆栈空间 7 000000 .bss a,4 ;为系数为系数a分配分配4个单元的空间个单元的空间 8 000004 .bss x,4 ;为变量为变量x分配分配4个单元的空间个单元的空间 9 000008 .bss y,1 ;为结果为结果y 分配分配1个单元的空间个单元的空间 10 .global _c_int00 ;定义标号定义标号 列表文件中包括源程序列表文件中包括源程序语语句和目句和目标标代代码码 11 000000 .data ;定

26、义数据代码段定义数据代码段 12 000000 0001 table:.word 1,2,3,4 ;在标号在标号table开始的开始的8个单元中个单元中 000001 0002 000002 0003 000003 0004 13 000004 0008 .word 8,6,4,2 ;为这为这8个单元赋初值个单元赋初值 000005 0006 000006 0004 000007 0002 14 000000 .text ;定义文本代码段定义文本代码段 15 000000 7728 _c_int00 STM#0,SWWSR ;软件等待状态寄存器置软件等待状态寄存器置0,不设等待,不设等待 00

27、0001 0000 16 000002 7718 STM#STACK+10h,SP ;设置堆栈指针初值设置堆栈指针初值 000003 0010-17 000004 7711 STM#a,AR1 ;AR1 指向指向 a的地址的地址 000005 0000-18 000006 EC07 RPT#7 ;从程序存储器向数据存储器从程序存储器向数据存储器 19 000007 7C91 MVPD table,*AR1+;重复传送重复传送 8个数据个数据 000008 0000 源文件的每一行都会在列表文件源文件的每一行都会在列表文件中生成一行。包括行号、段程序中生成一行。包括行号、段程序计数器计数器SPC

28、SPC的数值、汇编后的目的数值、汇编后的目标代码、源程序语句标代码、源程序语句。一条指令可以生成一条指令可以生成1 1或或2 2个字的目个字的目标标代代码码。第第2 2字字单单独列一行,列出了独列一行,列出了SPCSPC的数的数值值和目和目标标代代码码 。20 000009 F074 CALL SUM ;调用调用 SUM 实现乘法累加和的子程序实现乘法累加和的子程序 00000a 000D 21 00000b F073 end:B end ;循环等待循环等待 00000c 000B 22 00000d 7713 SUM:STM#a,AR3 ;将系数将系数a的地址赋给的地址赋给AR3 00000

29、e 0000-23 00000f 7714 STM#x,AR4 ;将变量将变量x的地址赋给的地址赋给AR3 000010 0004-24 000011 F071 RPTZ A,#3 ;将将A清清0,并重复执行下条指令,并重复执行下条指令4次次 000012 0003 25 000013 B09A MAC *AR3+,*AR4+,A;执行乘法并累加,结果放在执行乘法并累加,结果放在A中中 26 000014 8008-STL A,y ;将将A的低字内容送结果单元的低字内容送结果单元y 27 000015 FC00 RET ;结束子程序结束子程序 28 .end ;结束全部程序结束全部程序No A

30、ssembly Errors,No Assembly WarningsField 1源程序语句的行源程序语句的行号,用十进制数表示号,用十进制数表示 Field 2段程序段程序计计数器(数器(SPCSPC),),用十六用十六进进制数表示制数表示 Field 4:源程序语源程序语句句 Field 3目标代码目标代码!未定义的外部引用。未定义的外部引用。.text.text段重新定位。段重新定位。”.data”.data段重新定位。段重新定位。+.sect+.sect段重新定位。段重新定位。-.bss-.bss和和.usect.usect段重新定位。段重新定位。下例列出的是一个汇编语言程序经汇编后

31、的.lst文件(部分)。.lst文件由4个部分组成,即:第一部分:源程序的行号;第二部分:段程序计数器;第三部分:目标代码;第四部分:源程序。一条指令可以生成1或2个字的目标代码。汇编器为第2字单独列一行,列出了SPC的数值和目标代码。目标代码后面的一些记号,表示在连接时需要重新定位。如:!未定义的外部引用。.text段重新定位。”.data段重新定位。+.sect段重新定位。-.bss和.usect段重新定位。2 *3 *Reserve space in.bss for a variable *4 *5 0000 .data6 0000 0011 coeff .word 011h,022h,

32、033h 0001 0022 0002 00337 *8 *Reserve space in.bss for a variable *9 *10 0000 .bss buffer,1011 *12 *still in .data *13 *14 0003 0123 ptr .word 0123h15 *16 *Assemble code into the.text section *17 *18 0000 .text19 0000 100f add:ld 0Fh,A20 0001 f010 aloop:SUB#1,A 0002 0001 21 0003 f842 BC aloop,AGEQ 0

33、004 000122 *23 *Another initialized table into.data *24 *25 0004 .data26 0004 00aa ivals .word 0AAh,0BBh,0CCh 0005 00bb 0006 00cc27 *28 *Define another section for more variables *29 *30 0000 var2 .usect “newvars”,131 0001 inbuf .usect “newvars”,732 *33 *Assemble more code into.text *34 *35 0005 .te

34、xt36 0005 110a mpy:LD 0Ah,B37 0006 f166 mloop:MPY#0Ah,B 0007 000a38 0008 f868 BC mloop,BNOV 0009 000639 *40*Define a named section for int.vectors *41 *42 0000 .sect “vectors”43 0000 0011 .word 011h,033h 44 0001 0033 field 1 field 2 field 3 field 4 在此例中,一共建立了5个段:.text 段内有10个字的程序代码。.data 段内有7个字的数据。ve

35、ctors 是一个用.sect建立的自定义段,段内有2个字的已初始化数据。.bss 在存储器中为变量保留10个存储单元。newvars 是一个用.usect命令建立的自定义段,它在存储器中为变量保留8个存储单元。本例的目标代码如图4-4所示。目目标标文件文件的链接的链接 链链接器接器主要主要功能功能根据根据链链接命令或接命令或链链接命令文件接命令文件(.cmd.cmd文件),将一个或多个文件),将一个或多个COFFCOFF目目标标文件文件链链接起来,生成存接起来,生成存储储器映器映象文件(象文件(.map.map)和可)和可执执行的行的输输出文出文件(件(.out.out)()(COFFCOF

36、F目目标标模模块块).cmd文件中除了指出输入文件和输出文件外,还说明系统中有哪些可用的存储器,程序段、数据段、堆栈以及复位向量和中断向量等安排在什么地方。链接后生成的.map文件中给出了存储器的配置情况、程序文本段、数据段、堆栈段、向量段、在存储器中的定位表,以及全局符号在存储器中的位置。链接后生成的.out文件是一个可执行文件。1 1运行链接程序运行链接程序 (1 1)键入命令)键入命令 lnk500 lnk500(2 2)键入命令)键入命令lnk500 file1.obj file2.obj olnk500 file1.obj file2.obj o(3 3)键键入命令入命令 lnk50

37、0 linker.cmd lnk500 linker.cmd 链链接器接器是是名名为为lnk500.exe lnk500.exe 的可执行程序的可执行程序应包含如下内容:应包含如下内容:file1.objfile1.objfile2.objfile2.obj-o lind.out-o lind.out2 2链接器选项链接器选项 建立一个名为建立一个名为a.outa.out(默认情况)的可重新(默认情况)的可重新定位的输出模块。定位的输出模块。3.3.链接器对段的处理链接器对段的处理 (1 1)把把一一个个或或多多个个COFFCOFF目目标标文文件件中中的的各各种种段段作作为为链链接接器器的的输

38、输入入段段,经经链链接接后后在在一一个个可可执执行行的的COFFCOFF输输出出模模块块中建立各个输出段。中建立各个输出段。(2 2)为各个输出段选定存储器地址。)为各个输出段选定存储器地址。链链接器在接器在对对段段进进行行处处理理时时,主要完成,主要完成 汇编器在需要引用重新定位的符号处都留汇编器在需要引用重新定位的符号处都留了一个重定位入口。链接器对符号重定位了一个重定位入口。链接器对符号重定位时,利用这些入口修正对符号的引用值。时,利用这些入口修正对符号的引用值。4.4.链接器命令文件链接器命令文件 (1 1)将将有有多多个个选选项项的的命命令令,写写成成一一个个链链接接器命令文件器命令

39、文件.cmd.cmd。(2 2)运运行行链链接接器器命命令令文文件件.cmd.cmd,生生成成一一个个映象文件映象文件.map.map和一个可和一个可执执行的行的输输出文件出文件.out.out (3 3)进行存储器分配)进行存储器分配主主要要功功能能 使用方法使用方法lnk500lnk500链链接器命令文件接器命令文件名名.cmd.cmd 5两条链接器命令的使用方法两条链接器命令的使用方法MEMORYMEMORY命命令令用用来来定定义义目目标标系系统统中中所所包包含含的的各各种种形形式式的的存存储储器器的的存存储储器器配配置置图图,包包括括对对存存储储器器各各部部分分命命名名,以以及及规规定

40、定它它们的起始地址和长度。们的起始地址和长度。定定义义系系统统(1 1)MEMORYMEMORY命令命令 功功能能EMEORYEMEORY PAGE 0:name 1 PAGE 0:name 1(attrattr):origin=constant,length=constant:origin=constant,length=constantPAGE n:name n PAGE n:name n(attrattr):origin=constant,length=constant:origin=constant,length=constant MEMORYMEMORY命令的一般句法命令的一般句法对

41、对一一个个存存储储空空间间加加以以标标记记,每每一一个个PAGEPAGE代代表表一一个个完完全全独独立立的的地地址址空空间间。页页号号n n最最多多可可规规定定为为255255,取取决决于于目目标标存存储储器器的的配配置置。通通常常PAGE PAGE 0 0定定为为程程序序存存储储器器,PAGE PAGE 1 1定定为为数数据据存存储储器器。如如果果没没有有规规定定PAGEPAGE,则链接器就目标存储器配置在,则链接器就目标存储器配置在PAGE 0PAGE 0。EMEORYEMEORY PAGE 0:name 1 PAGE 0:name 1(attrattr):origin=constant,

42、length=constant:origin=constant,length=constantPAGE n:name n PAGE n:name n(attrattr):origin=constant,length=constant:origin=constant,length=constant MEMORYMEMORY命令的一般句法命令的一般句法名名字字可可以以包包含含8 8个个字字符符,A AZ Z、a az z、$、.、_ _均均可可。名名字字并并没没有有特特殊殊的的含含义义,用用来来标标记记存存储储器器的的区区间间而而已已;名名字字都都是是内内部部记记号号,不不需需要要保保留留在在输输

43、出出文文件件或或者者符符号号表表中中。不不同同PAGEPAGE上上的的存存储储器器区区间间可可以以取取相相同同的的名名字字,但但在在同同一一PAGEPAGE内内的的名名字字不不能能相相同同,且且不不许许重叠配置。重叠配置。EMEORYEMEORY PAGE 0:name 1 PAGE 0:name 1(attrattr):origin=constant,length=constant:origin=constant,length=constantPAGE n:name n PAGE n:name n(attrattr):origin=constant,length=constant:origi

44、n=constant,length=constant MEMORYMEMORY命令的一般句法命令的一般句法任任选选项项,为为命命名名区区规规定定1 14 4个个属属性性。如如果果有有选选项项,应写在括号内。应写在括号内。当当输输出出段段定定位位到到存存储储器器时时,可利用属性加以限制。可利用属性加以限制。规规定定一一个个存存储储区区的的起起始始地地址址。键键入入originorigin、orgorg或或o o都都可可以以。这这个个值值是是一一个个1616位位二二进进制制常常数数,可可以以用用十十进进制制数数、八八进进制制数或十六进制数表示。数或十六进制数表示。规定一个存储区的长度,键规定一个存

45、储区的长度,键入入lengthlength、lenlen或或l l都可以。都可以。例例 MEMORYMEMORY命令的使用方法。命令的使用方法。/*Example command file with MEMORY directive */*Example command file with MEMORY directive */file1.obj file2.obj /*Input files*/file1.obj file2.obj /*Input files*/-o prog.out /*Options-o prog.out /*Options */*/MEMORYMEMORY PAGE0

46、:ROM:origin=c00h,length=1000h PAGE0:ROM:origin=c00h,length=1000h PAGE1:SCRTCH:origin=60h,length=20h PAGE1:SCRTCH:origin=60h,length=20h ONCHIP:origin=80h,length=200h ONCHIP:origin=80h,length=200h 名名为为ROMROM的的程序存程序存储储器:器:4K4K字字ROMROM,起始地址,起始地址C00hC00h。名为名为SCRATCHSCRATCH的数据存储器:的数据存储器:3232字字RAMRAM,起始地址,

47、起始地址60h60h。名为名为ONCHIPONCHIP的数据存储器:的数据存储器:512512字字RAMRAM,起始地址为,起始地址为80h80h。告诉链接器如何将输入段合成输出段告诉链接器如何将输入段合成输出段在可执行程序中定义输出段在可执行程序中定义输出段规定输出段在存储器中的存放位置规定输出段在存储器中的存放位置允许重新命名输出项。允许重新命名输出项。(2 2)SECTIONSSECTIONS命令命令 功功能能在在链链接接器器命命令令文文件件中中,SECTIONSSECTIONS命命令令用用大大写写字字母母,紧紧随随其其后后并并用用大大括括号号括括起起来来的的是是关关于于输输出出段段的的

48、详详细细说说明明。每每一一个个输输出出段段的的说说明明都都从从段段名名开开始始。段段名名后后面面是是一一行行说说明明段段的的内内容容和如何和如何给给段分配存段分配存储单储单元的性能参数。元的性能参数。注意注意SECTIONSSECTIONS namename:property,property,property,property,property,property,namename:property,property,property,property,property,property,namename:property,property,property,property,property

49、,property,SECTIONSSECTIONS命令的一般句法命令的一般句法 性能参数性能参数n在链接器命令文件中,SECTIONS命令用大写字母,紧随其后并用大括号括起来的是关于输出段的详细说明。每一个输出段的说明都从段名开始。段名后面是一行说明段的内容和如何给段分配存储单元的性能参数。一个段可能的性能参数有:(1)load allocation:用来定义将输出段加载 到存储器中的什么位置。(2)Run allocation用来定义输出段在存储器的什么位置上开始运行。(3)Input sections:用来定义由哪些输入段组成输出段。(4)Section type:用它为输出段定义特殊形

50、式的标记。MEMORY和SECTIONS命令的缺省算法:如果没有利用MEMORY和SECTIONS命令,链接器就按缺省算法来定位输出段:MEMORY PAGE 0:PROG:origin=0 x0080,length=0 xFF00 PAGE 1:DATA:origin=0 x0080,length=0 xFF80SECTIONS .text:PAGE=0 .data:PAGE=0 .cinit:PAGE=0 .bss:PAGE=1 在缺省MEMORY和SECTIONS命令情况下,链接器将所有的.text输入段,链接成一个.text输出段,它是可执行的输出文件;所有的.data输入段组合成.d

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁