DSP原理与应用-汇编语言程序开发工具_第1页
DSP原理与应用-汇编语言程序开发工具_第2页
DSP原理与应用-汇编语言程序开发工具_第3页
DSP原理与应用-汇编语言程序开发工具_第4页
DSP原理与应用-汇编语言程序开发工具_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

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

文档简介

DSP原理及应用第6章汇编语言程序开发工具

6.1

TMS320C54x软件开发过程

6.2汇编语言程序的编辑、汇编和链接过程6.3

COFF的一般概念6.4源程序的汇编6.5链接器的使用1DSP原理及应用2第6章汇编语言程序开发工具6.1TMS320C54x软件开发过程

’C54x的应用软件开发主要完成以下工作:(1)

选择编程语言编写源程序

’C54x提供2种编程语言,即汇编语言和C/C++语言。

(2)

选择开发工具和环境

’C54x提供了两种开发环境。即非集成开发环境和集成开发环境CCS。

DSP原理及应用3第6章汇编语言程序开发工具6.1TMS320C54x软件开发过程

1.

’C54x应用软件开发流程C源文件C编译器汇编源文件汇编器汇编源文件COFF目标文件链接器可执行的COFF文件宏源文件存档器宏库存档器目标文件库建库工具运行时支持库EPROM编程器交叉引用列表器调试工具TMS320C54x绝对地址列表器HEX代码转换工具DSP原理及应用4第6章汇编语言程序开发工具2.

’C54x的开发工具

TI公司提供的DSP开发环境和工具主要包括以下三个部分:

代码生成工具代码调试工具

实时操作系统DSP原理及应用5第6章汇编语言程序开发工具2.

’C54x的开发工具(1)代码生成工具:C编译器

汇编器链接器文档管理器建库实用程序十六进制转换程序DSP原理及应用6第6章汇编语言程序开发工具2.

’C54x的开发工具(2)代码调试工具:

C/汇编语言源码调试器:与软件仿真器、评价模块、软件开发系统、软件仿真器等配合使用。

软件仿真器:是一种模拟DSP芯片各种功能并在非实时条件下进行软件调试的调试工具,它不需目标硬件支持,只需在计算机上运行。初学者工具DSK:是TI公司提供给初学者进行DSP编程练习的一套廉价的实时软件调试工具。

DSP原理及应用7第6章汇编语言程序开发工具DSK(DSPStarterKitm)DSP原理及应用8第6章汇编语言程序开发工具C5402DSK实物图DSP原理及应用9第6章汇编语言程序开发工具2.

’C54x的开发工具(2)代码调试工具:

可扩展的开发系统仿真器(XDS510):可用来进行系统级的集成调试,是进行DSP芯片软硬件开发的最佳工具。评价模块EVM板:是一种低成本的开发板,可进行DSP芯片评价、性能评估和有限的系统调试。

DSP原理及应用10第6章汇编语言程序开发工具6.2汇编语言程序的编辑、汇编和链接过程示意图汇编器调试程序链接器文本编辑器.asm源文件.obj目标文件.out输出文件.cmd链接命令文件.lst列表文件.map存储器映像文件十六进制转换程序HEX500-

o-

m-

lDSP原理及应用11第6章汇编语言程序开发工具6.2汇编语言程序的编辑、汇编和链接过程汇编语言源程序以.asm为其扩展名汇编语言源程序的每一行都可以由四个部分组成,语法如下:[标号][:] 助记符 [操作数] [;注释]1.

编辑

DSP原理及应用12第6章汇编语言程序开发工具6.2汇编语言程序的编辑、汇编和链接过程2.

汇编常用的汇编命令:

asm500%1-s-1-x调用汇编器命令

源文件名

将程序所有定义的符号放在目标文件的符号表中

生成一个列表文件.lst

生成一个交叉汇编表DSP原理及应用13第6章汇编语言程序开发工具6.2汇编语言程序的编辑、汇编和链接过程3.

链接常用的汇编器命令:

lnk500%1.cmd

lnk500:

调用链接器命令

%1.cmd:

链接命令文件名,该文件须指明目标文件、输入文件、输出文件、链接选项和存储器配置要求等。DSP原理及应用14第6章汇编语言程序开发工具6.3

COFF的一般概念

汇编器和链接器生成的目标文件,是一个可以由’C54x器件执行的文件。这些目标文件的格式称之为公共目标文件格式(COFF)。

FileHeaderOptionalHeaderSectionHeader1

SectionHeadernSectionDataRelocationDirectivesLineNumbersSymbolTableStringTableDSP原理及应用15第6章汇编语言程序开发工具6.3

COFF的一般概念

6.3.1

COFF文件的基本单元

COFF文件有3种类型:COFF0、COFF1、COFF2。

链接器能够读/写所有类型的COFF文件,默认时链接器生成的是COFF2文件,采用-vn链接选项可以选择不同类型的COFF文件。

’C54x汇编器和C编译器产生的是COFF2文件。

DSP原理及应用16第6章汇编语言程序开发工具6.3.1

COFF文件的基本单元

1.

段(sections)

段——是存储器中占据相邻空间的代码或数据块。一个目标文件中的每个段都是分开的和各不相同的。

COFF目标文件都包含以下3种形式的段:

.text

段(文本段).data

段(数据段).bss

段(保留空间段)DSP原理及应用17第6章汇编语言程序开发工具6.3.1

COFF文件的基本单元

2.

段的基本类型

COFF目标文件中的段有两种基本类型。

初始化段

未初始化段(1)

初始化段

初始化段中包含有数据或程序代码。主要有:

.text段——已初始化段;

.data段——已初始化段;.sect段——已初始化段,由汇编器伪指令建立的自定义段。

DSP原理及应用18第6章汇编语言程序开发工具6.3.1

COFF文件的基本单元

2.

段的基本类型

COFF目标文件中的段有两种基本类型。(2)

未初始化段

在存储空间中,为未初始化数据保留存储空间。它包括:

.bss段——未初始化段;.usect段——未初始化段,由汇编命令建立的命名段(自定义段)。DSP原理及应用19第6章汇编语言程序开发工具6.3.1

COFF文件的基本单元

3.

段与目标存储器的对应关系

汇编器的任务:在汇编过程中,根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文件。

链接器的任务:就是分配存储单元,将目标文件中的段重新定位到目标系统的存储器中,这一过程称为定位或分配。

DSP原理及应用20第6章汇编语言程序开发工具3.

段与目标存储器的对应关系目标文件中的段与目标存储器之间的关系目标文件目标存储器.bss.data.textRAME2PROMROMDSP原理及应用21第6章汇编语言程序开发工具6.3.2

汇编器对段的处理

汇编器有5条伪指令可识别汇编语言程序的各个部分:

●.bss

●.usect

●.text

●.data

●.sect——定义未初始化段——定义未初始化段——定义已初始化段——定义已初始化段——定义已初始化段DSP原理及应用22第6章汇编语言程序开发工具6.3.2

汇编器对段的处理

未初始化段就是在’C54x存储器中保留空间,通常它们被定位在RAM区。在目标文件中,这些段中没有确切的内容。

由这些段定义的空间仅作为临时存储空间,在程序运行时,可以利用这些存储空间存放变量。

未初始化段分为默认的和命名的两种,分别由汇编器伪指令.bss和.usect产生。1.未初始化段

DSP原理及应用23第6章汇编语言程序开发工具(1).bss伪指令1.未初始化段

用于在bss段中保留若干个空间。

格式:

.bss

符号,字数.bssx,1.bssbuffer,10DSP原理及应用24第6章汇编语言程序开发工具1.未初始化段

(2).usect伪指令

用于为指定的命名段保留若干个空间。

格式:符号.usect

“段名”,字数DSP原理及应用25第6章汇编语言程序开发工具6.3.2

汇编器对段的处理

已初始化段中包含有可执行代码或初始化数据。

已初始化段由.text、.data和.sect三个伪指令建立。2.

已初始化段DSP原理及应用26第6章汇编语言程序开发工具

已初始化命令的句法:

2.

已初始化段

.text[段起点]

.data[段起点]

.sect

“段名”[,段起点]DSP原理及应用27第6章汇编语言程序开发工具6.3.2

汇编器对段的处理

命名段由用户指定,与默认的.text,.data和.bss段的使用相同,但它们被分开汇编。

可用.usect和.sect两个伪指令产生命名段。3.

命名段(自定义段)DSP原理及应用28第6章汇编语言程序开发工具

.usect伪指令产生类似.bss的段,为变量在RAM中保留存储空间。

.sect伪指令产生类似.text和.data的段,可以包含代码或数据。.sect伪指令产生可重新定位地址的命名段。3.

命名段

产生命名段伪指令格式:

符号

.usect

“段名”,字数

.sect

“段名”DSP原理及应用29第6章汇编语言程序开发工具6.3.2

汇编器对段的处理

汇编器为每个段都安排了一个单独的程序计数器称之为段程序计数器SPC。链接器在链接时要对每个段进行重新定位。4.

段程序计数器SPCDSP原理及应用30第6章汇编语言程序开发工具【例6.3.1】段命令应用举例。

汇编语言源程序:

.datacoeff.word044h,055h,066h.bssbuffer,8prt.word0456h.textadd:LD0Dh,Aaloop:SUB#1,A

BCaloop,AGEQ.dataivals.word0CCh,0DDh,0EEh

;初始化数据段

;3组数据放入.data段

;在.bss段保留8个单元

;0456h放入.data段

;初始化文本段

;1字指令

;2字指令

;2字指令共计5个字

;初始化数据段

;3组数据放入.data段DSP原理及应用31第6章汇编语言程序开发工具汇编语言源程序:var2.usect“newvars”,2inbuf.usect“newvars”,8

.text

mpy:LD0Ah,B

mloop:MPY#0Ah,BBCmloop,BNOV.sect“vectors”

.word044h,088h

;建立newvars命名段,保留2个单元

;在newvars段保留8个单元

;初始化文本段

;1字指令

;2字指令

;2字指令共计5个字;建立vectors命名段

;2组数据放入vectors命名段DSP原理及应用32第6章汇编语言程序开发工具经汇编后,得列表文件(部分):2**********************************3

**汇编一个初始化表到.data段**4

**********************************5

0000.data6

0000

0044coeff.word044h,055h,066h

0001

0055

0002

00667**********************************8**在.bss段中为变量保留空间**9**********************************10

0000.bssbuffer,811**********************************12**仍然在.data段中**13**********************************14

0003

0456prt.word0456hDSP原理及应用33第6章汇编语言程序开发工具15**********************************16**汇编代码到.text段**17**********************************18

0000.text19

0000

100dadd:LD0Dh,A20

0001

f010aloop:SUB#1,A

0002

0001

21

0003

f842

BCaloop,AGEQ

0004

0001’

22

**********************************23

**汇编另一个初始化表到.data段**

24**********************************25

0004

.data

26

0004

00ccivals.word0CCh,0DDh,0EEh

0005

00dd

0006

00ee27**********************************28

**为更多的变量定义另一个段**29**********************************30

0000var2.usect“newvars”,231

0001

inbuf.usect“newvars”,8

DSP原理及应用34第6章汇编语言程序开发工具32

****************************************33

**汇编更多代码到.text段**34****************************************35

0005

.text

36

0005

110a

mpy:LD0Ah,B

37

0006

f166mloopMPY#0Ah,B

0007

000a

38

0008

f868BCmloop,BNOV

0009

0006’

39****************************************40

**为中断向量.vectors定义一个自定义段**41****************************************42

0000

.sect“vectors”

43

0000

0044

.word044h,088h

0001

0088

DSP原理及应用35第6章汇编语言程序开发工具

汇编语言源程序经过汇编后,共建立了5个段:

.text段——文本段,段内有10个字可执行

的程序代码。

.data段——已初始化的数据段,段内有7

个字的数据。

vectors段——用.sect命令生成的命名段,

段内有2个字的初始化数据。

.bss段——未初始化的数据段,在存储器中

为变量保留8个存储单元。

newvars段——用.usect命令建立的命名段,为变量保留10个存储单元。

DSP原理及应用36第6章汇编语言程序开发工具经汇编后,得列表文件(部分):2*******************************3

**汇编一个初始化表到.data段**4

*******************************5

0000.data6

0000

0044coeff.word044h,055h,066h

00010055

000200667*******************************8**在.bss段中为变量保留空间**9*******************************10

0000.bssbuffer,811*******************************12**仍然在.data段中**13

*******************************14

00030456prt.word0456h行号目标代码段名100df0100001f8420001110af166000aF8680006004400550066045600cc00dd00ee00440088

没有数据保留10个字5

0000.data600000044coeff.word044h,055h,066h100000.bssbuffer,81400030456prt.word0456h.data

6

00446

00556

006610

.bss

没有数据保留8个字14

0456DSP原理及应用37第6章汇编语言程序开发工具15********************************16**汇编代码到.text段**17********************************18

0000.text19

0000

100dadd:LD0Dh,A20

0001

f010aloop:SUB#1,A

0002

0001

21

0003

f842

BCaloop,AGEQ

0004

0001’

22

**********************************23

**汇编另一个初始化表到.data段**

24**********************************25

0004

.data

26

0004

00ccivals.word0CCh,0DDh,0EEh

0005

00dd

0006

00ee27********************************28

**为更多的变量定义另一个段**29********************************30

0000var2.usect“newvars”,231

0001

inbuf.usect“newvars”,8

行号目标代码段名100df0100001f8420001110af166000aF868000666614004400550066045600cc00dd00ee.data00440088

10没有数据保留8个字.bss没有数据保留10个字.text

180000.text190000100dadd:LD0Dh,A19

100d200001f010aloop:SUB#1,A20

f01020

0001210003f842BCaloop,AGEQ21

f84221

0001250004.data26000400ccivals.word0CCh,0DDh,0EEh.data

26

00cc26

00dd26

00ee300000var2.usect“newvars”,230

保留2个字310001inbuf.usect“newvars”,831

保留8个字newvars

DSP原理及应用38第6章汇编语言程序开发工具32

*********************************33

**汇编更多代码到.text段**34*********************************35

0005

.text

36

0005

110a

mpy:LD0Ah,B

370006

f166mloopMPY#0Ah,B

0007

000a

38

0008

f868BCmloop,BNOV

0009

0006’

39****************************************40

**为中断向量.vectors定义一个自定义段**41****************************************42

0000

.sect“vectors”

430000

0044

.word044h,088h0001

0088

行号目标代码段名1920202121100df0100001f8420001110af166000aF8680006.text66614262626004400550066045600cc00dd00ee.data00440088

10没有数据保留8个字.bss3031没有数据保留10个字newvars350005.text.text

360005110ampy:LD0Ah,B36

110a370006f166mloopMPY#0Ah,B37

f16837

000a380008f868BCmloop,BNOV38

f86838

0006420000.sect“vectors”vectors

4300000044.word044h,088h43

004443

0088DSP原理及应用39第6章汇编语言程序开发工具6.3.3

链接器对段的处理

链接器是开发’C54x器件必不可少的开发工具之一,它对段处理时有2个主要任务:

将一个或多个COFF目标文件中的各种段作为链接器的输入段,经链接后在一个执行的COFF输出模块中建立各个输出段;

②在程序装入时对其重新定位,为各个输出段选定存储器地址。DSP原理及应用40第6章汇编语言程序开发工具6.3.3

链接器对段的处理

链接器有2条伪指令支持上述任务:

MEMORY伪指令

SECTIONS伪指令DSP原理及应用41第6章汇编语言程序开发工具6.3.3

链接器对段的处理默认的存储器分配

①将所有.text段组合在一起,形成一个.text段,并分配到程序存储器中;②将多个目标文件中的.data段组合在一起,分配到紧接着.text段的程序存储空间中;

③将.bss段组合,配置到数据存储器中;

④组合命名段。初始化的命名段按顺序分配到紧随.data段的程序存储器,而未初始化命名段将被配置到紧随.bss段的数据存储器中。

DSP原理及应用42第6章汇编语言程序开发工具默认的存储器分配过程:File1.obj.text1.data1.bss1table_1(初始化的命名段)u_vars1(未初始化的命名段)File2.obj.text2.data2.bss2table_2(初始化的命名段)u_vars2(未初始化的命名段)FFT(初始化的命名段)程序存储器数据存储器.text.text1.text2.data.data1.data2.bss.bss1.bss2tabletable_1table_2u_vars1u_vars1u_vars2FFTFFT没有使用没有配置没有配置没有使用DSP原理及应用43第6章汇编语言程序开发工具6.3.4

链接器对程序的重新定位1.

链接器重新定位

重新定位的方法:

将各个段配置到存储器中,使每个段都有一个合适的起始地址;

将符号变量调整到相对于新的段地址的位置;

将引用调整到重新定位后的符号,这些符号反映了调整后的新符号值。

DSP原理及应用44第6章汇编语言程序开发工具6.3.4

链接器对程序的重新定位2.

运行时间重新定位

利用SECTIONS伪指令选项可让链接器对其定位2次,其方法:

①使用运行关键字设置它的运行地址;

②使用装入关键字设置装入地址。DSP原理及应用45第6章汇编语言程序开发工具6.3.5

程序装入

可以采用以下方法装入程序:

使用调试工具转入程序

’C54x的调试工具包括软件模拟器,XDS仿真器和集成系统CCS。它们都具有内部的装入器,调用装入器的LOAD命令,装入器将程序复制到目标系统的存储器中。

采用Hex转换工具转入程序可以使用转换工具Hex500,将可执行COFF目标模块转换成几种其他目标格式文件,然后将转换后的文件通过编程器将程序装(烧)进EPROM。

DSP原理及应用46第6章汇编语言程序开发工具6.3.6

COFF文件中的符号1.

外部符号

是指在一个模块中定义、而在另一个模块中引用的符号。它可以用伪指令.def、.ref或.global来定义。

●.def在当前模块中定义,并可在别的模块中使用的符号;

●.ref在当前模块中使用,但在别的模块中定义的符号;

●.global可以是上面的任何一种情况。

DSP原理及应用47第6章汇编语言程序开发工具1.

外部符号【例6.3.2】说明代码段中外部符号的定义。

x:ADD#56h,ABy.defx

.refy

;定义x

;引用y

;x在此模块中定义,可为别

的模块引用

;y在这里引用,它在别的模

块中定义

DSP原理及应用48第6章汇编语言程序开发工具6.3.6

COFF文件中的符号2.

符号表

每当遇到一个外部符号,无论是定义的还是引用的,汇编器都将在符号表中产生一个条目。汇编器还产生一个指到每段的专门符号,链接器使用这些符号将其他引用符号重新定位。

DSP原理及应用49第6章汇编语言程序开发工具6.4源程序的汇编

汇编器包括如下功能:

将汇编语言源程序汇编成一个可重新定位的目标文件(.obj文件)。

根据需要,可以生成一个列表文件(.lst文件),并对该列表进行控制。

将程序代码分成若干个段,每个段的目标代码都有一个SPC(段程序计数器)管理。

DSP原理及应用50第6章汇编语言程序开发工具6.4源程序的汇编

汇编器包括如下功能:

定义和引用全局符号,如果需要可以在列表文件后面附加一张交叉引用表。

对条件程序块进行汇编。

支持宏功能,允许定义宏命令。

为每个目标代码块设置一个程序计数器SPC。

DSP原理及应用51第6章汇编语言程序开发工具6.4源程序的汇编

6.4.1

汇编程序的运行

’C54x的汇编程序名为asm500.exe。要运行汇编程序,可键入如下命令:asm500

[inputfile

[objectfile[listingfile]]]

[-options]

Asm500

:运行汇编程序asm

500.exe的命令。

inputfile

:汇编源文件名,默认扩展名为.asm。objectfile

:汇编程序生成的’C54x目标文件,扩展名为.obj。listingfile

:汇编器产生的列表文件名,默认扩展名为.lst。-options

:

汇编器的选项,为汇编器的使用提供各种选择。DSP原理及应用52第6章汇编语言程序开发工具汇编器asm500的选项及其功能

选项功能-@

-@filemane(文件名)可以将文件名的内容附加到命令行上。使用该选项可以避免命令行长度的限制。如果在一个命令文件、文件名或选项参数中包含了嵌入的空格或连字号,则必须使用引号括起来,例如:“this-file.asm”。

-a建立一个绝对列表文件。当选用-a时,汇编器不产生目标文件。-c

使汇编语言文件中大小写没有区别。-d为名字符号设置初值。格式为-dname[=value]时,与汇编文件被插入name.set[=value]是等效的。如果value被省略,则此名字符号被置为1。

-f

抑制汇编器给没有.asm扩展名的文件添加扩展名的默认行为。

DSP原理及应用53第6章汇编语言程序开发工具汇编器asm500的选项及其功能

选项功能-g

允许汇编器在源代码中进行代码调试。汇编语言源文件中每行的信息输出到COFF文件中。注意:用户不能对已经包含.line伪指令的汇编代码使用-g

选项。例如由C/C++编译器运行-g选项产生的代码。

-h,-help,-?

这些选项的任一个将显示可供使用的汇编器选项的清单。

-hc

将选定的文件复制到汇编模块。格式为-hcfilename

所选定的文件包含到源文件语句的前面,复制的文件将出现在汇编列表文件中。

-hi

将选定的文件包含到汇编模块。格式为-hifilename

所选定的文件包含到源文件语句的前面,所包含的文件不出现在汇编列表文件中。

DSP原理及应用54第6章汇编语言程序开发工具汇编器asm500的选项及其功能

选项功能-i

规定一个目录。汇编器可以在这个目录下找到.copy、

.include或.mlib命令所命名的文件。格式为-ipathname,最多可规定10个目录,每一条路径名的前面都必须加上-i选项。

-l

(小写L)生成一个列表文件。

-mf

指定汇编调用扩展寻址方式

-mg

源文件是代数式指令。

-q

抑制汇编的标题以及所有的进展信息。

-r,-r[num]

压缩汇编器由num标识的标志。该标志是报告给汇编器的消息,这种消息不如警告严重。若不对num指定值,则所有标志都将被压缩。DSP原理及应用55第6章汇编语言程序开发工具汇编器asm500的选项及其功能

选项功能-pw对某些汇编代码的流水线冲突发出警告。

-u

-uname取消预先定义的常数名,从而不考虑由任何-d

选项所指定的常数。

-v-vvalue确定使用的处理器,可用541,542,543,545,5451p,5461p,548,549值中的一个。

-s

把所有定义的符号放进目标文件的符号表中。汇编程序通常只将全局符号放进符号表。当利用-s选项时,所定义的标号以及汇编时定义的常数也都放进符号表内。-x产生一个交叉引用表,并将它附加到列表文件的最后,还在目标文件上加上交叉引用信息。即使没有要求生成列表文件,汇编程序总还是要建立列表文件的。

DSP原理及应用56第6章汇编语言程序开发工具6.4.2

汇编时的列表文件列表文件包括4个部分:

源程序语句编号段程序计数器目标代码源程序语句DSP原理及应用57第6章汇编语言程序开发工具目标代码后记符含义

未定义的外部引用;

可重新定位的文本段;

可重新定位的数据段;

+

可重新定位的初始化命名段;

-

可重新定位的未初始化段;

%

复杂的重新定位的表达式。DSP原理及应用58第6章汇编语言程序开发工具6.4.3

汇编伪指令

将代码和数据汇编进指定的段●

为未初始化的变量在存储器中保留空间●

控制清单文件是否产生

初始化存储器●

汇编条件代码块

定义全局变量●

为汇编器指定从中可以获得宏的库●

考察符号调试信息

汇编器伪指令可完成以下工作:

DSP原理及应用59第6章汇编语言程序开发工具6.4.3

汇编伪指令⑴

对各种段进行定义的命令

如.bss、.data、.sect、.text、.usect等。

对常数(数据和存储器)进行初始化的命令如.bes、.byte、.field、.float、.int、.log、.space、.string、.pstring、.xfloat、.xlong、.word等。

DSP原理及应用60第6章汇编语言程序开发工具6.4.3

汇编伪指令⑶

调整SPC的指令

如.align等。

对输出列表文件格式化的命令

如.drlist、.drnolist等。

引用其他文件的命令

如copy、.def、.global、.include、.mlib、.ref等。

DSP原理及应用61第6章汇编语言程序开发工具6.4.3

汇编伪指令⑹

控制条件汇编的命令如.break、.else、.elseif、.endif、.endloop、.if、.loop等。

在汇编时定义符号的命令如.asg、.endstruct、.equ、.eval、.label、.set、.sruct等。

⑻执行其他功能的命令如.algebraic、.emsg、.end、.mmregs、.mmsg、.newblock、.sblock、.version、.vmsg等。DSP原理及应用62第6章汇编语言程序开发工具6.5

链接器的使用1.

运行链接程序

’C54x链接器的运行命令:

lnk500

[-options]filename1…filenamen

lnk500:

运行链接器命令。-options:

链接命令选项。filenames:

文件名。DSP原理及应用63第6章汇编语言程序开发工具1.

运行链接程序

’C54x链接器的运行,有三种方法:

(1)键入命令:

lnk500

链接器会提示如下信息:

Commandfiles:Objectfiles[.obj]:

OutputFiles[a.out]:Options:(要求键入一个或多个命令文件)

(要求键入一个或多个需要链接的目标文件)

(要求键入一个链接器所生成的输出文件名)(要求附加一个链接选项)DSP原理及应用64第6章汇编语言程序开发工具1.

运行链接程序

(2)

键入命令:

lnk500

file1.obj

file2.obj

-o

link.out

目标文件:

file1.obj、file2.obj

命令选项:

-o

输出文件:

link.outDSP原理及应用65第6章汇编语言程序开发工具1.

运行链接程序

(3)

键入命令:

lnk500

linker.cmd

linker.cmd:链接命令文件。

例如:希望完成第二种命令的链接,在链接命令文件中,应包含如下内容:

file1.objfile2.obj-olink.out

DSP原理及应用66第6章汇编语言程序开发工具6.5.1

链接器的运行

2.

链接命令选项链接命令选项选项含义-a

生成一个绝对地址的、可执行的输出模块。所建立的绝对地址输出文件中不包含重新定位信息。如果既不用-a

选项,也不用-r选项,链接器就像规定-a选项那样处理。

-ar

生成一个可重新定位、可执行的目标模块。这里采用了-a和-r两个选项(可以分开写成-a-r,也可以连在一起写作-ar),与-a选项相比,-ar选项还在输出文件中保留有重新定位信息。

-eglobal_symbol

定义一个全局符号,这个符号所对应的程序存储器地址,就是使用开发工具调试这个链接后的可执行文件时程序开始执行时的地址(称为入口地址)。当加载器将一个程序加载到目标存储器时,程序计数器(PC)被初始化到入口地址,然后从这个地址开始执行程序。

DSP原理及应用67第6章汇编语言程序开发工具2.

链接命令选项链接命令选项选项含义-ffill_vale

对输出模块各段之间的空单元设置一个16位数值(fill_value),如果不用-f选项,则这些空单元都置0。

-idir

更改搜索文档库算法,先到dir(目录)中搜索。此选项必须出现在-l选项之前。

-lfilename

命名一个文档库文件作为链接器的输入文件;filename为文档库的某个文件名。此选项必须出现在-i选项之后。

-mfilename

生成一个.map映像文件,filename是映像文件的文件名。.map文件中说明存储器配置、输入、输出段布局以及外部符号重定位之后的地址等。

-ofilename

对可执行输出模块命名。如果默认,则此文件名为a.out。

-r

生成一个可重新定位的输出模块。当利用-r选项且不用-a选项时,链接器生成一个不可执行的文件。

DSP原理及应用68第6章汇编语言程序开发工具6.5.2

链接器命令文件的编写与使用

链接命令文件为ASCⅡ文件,可包含以下内容:

(1)

输入文件名,用来指定目标文件、存档库或其他命令文件。

(2)

链接器选项,它们在命令文件中的使用方法与在命令行中相同。(3)

MEMORY和SECTIONS链接伪指令,用来指定目标存储器结构和地址分配。

DSP原理及应用69第6章汇编语言程序开发工具

例如:可根据给出链接命令,编写完成该命令操作的链接器命令文件link.cmd。

lnk500a.objb.obj-mprog.map-oprog.out

链接命令文件的内容如下:

a.obj/*第一个输入文件名*/b.obj/*第二个输入文件名*/-mprog.map/*指定map文件的选项*/-oprog.out/*指定输出文件的选项*/DSP原理及应用70第6章汇编语言程序开发工具

【例6.5.1】链接器命令文件举例。

a.objb.obj/*输入文件名*/

-oprog.out/*指定输出文件的选项*/-mprog.map/*指定map文件的选项*/

MEMORY/*MEMORY伪指令*/

{PAGE0:ROM:origin=1000h,length=0100hPAGE1:RAM:origin=0100h,length=0100h}SECTIONS/*SECTIONS伪指令*/

{.text:>ROM.data:>ROM.bss:>RAM}

DSP原理及应用71第6章汇编语言程序开发工具注意:在命令文件中,不能采用下列符号作为段名或符号名:

alignDSECTlenorunALIGNflengthorgRUNattrfillLENGTHoriginSECTIONSATTRFILLloadORIGINspareblockgroupLOADpagetypeBLOCKGROUPMEMORYPAGETYPECOPYl(小写L)NOLOADrangeUNIONDSP原理及应用72第6章汇编语言程序开发工具6.5.3CMD文件

1.

CMD文件组成

file.obj

//子目标文件名1

file2.obj

//子目标文件名2

file3.obj

//子目标文件名3

-oprog.out

//连接器操作指令,用来指定输出文件

-mprog.m

//用来指定MAP文件

MEMORY

{略

}

SECTIONS

{略

}

otherlink.cmd

DSP原理及应用73第6章汇编语言程序开发工具6.5.3CMD文件

2.

MEMORY伪指令

MEMORY的语法如下:

MEMORY

{

PAGE0:name1[(attr)]:origin=constant,length=constant

name1m[(attr)]:origin=constant,length=constant

PAGE1:name2[(attr)]:origin=constant,length=constant

name2m[(attr)]:origin=constant,length=constant

PAGEn:namen[(attr)]:origin=constant,length=constant

namenm[(attr)]:origin=constant,length=constant

}

DSP原理及应用74第6章汇编语言程序开发工具【例4.5.2】用MEMORY伪指令编写连接命令文件。要求:

程序存储器:4K字ROM,起始地址为C00h,取名为ROM。

数据存储器:32字RAM,起始地址为60h,取名为SCR。

512字RAM,起始地址为80h,取名为CHIP。file1.objfiel2.obj-oProg.outMEMORY{

PAGE0:

ROM:origin=C00h,length=1000h

PAGE1:

SCR:origin=60h,length=20h

CHIP:origin=80h,length=200h}

两个输入文件链接命令选项指令字页面名称区间名称起始地址区间长度DSP原理及应用75第6章汇编语言程序开发工具【例6.5.2】用MEMORY伪指令编写连接命令文件。file1.objfiel2.obj-oProg.outMEMORY{ PAGE0:

ROM:org=C00h,len=1000hPAGE1:

SCR:org=60h,len=20h

CHIP:org=80h,len=200h}

PAGE0:ROM:org=C00h,len=1000h程序存储器00000h0FFFFh00C00h1000h01C00hROMPAGE1:

SCR:org=60h,len=20h数据存储器00000h0FFFFh00060h0007Fh20hSCR

CHIP:org=80h,len=200h00080h200h0027FhCHIPDSP原理及应用76第6章汇编语言程序开发工具6.5.3CMD文件

3.

SECTIONS伪指令

SECTIONS的语法如下:

SECTIONS

{

.text:

{所有.text输入段名}

load=加载地址

run=运行地址

.data:

{所有.data输入段名}

load=加载地址

run=运行地址

.bss:

{所有.bss输入段名}

load=加载地址

run=运行地址

.other:{所有.other输入段名}

load=加载地址

run=运行地址

}

DSP原理及应用77第6章汇编语言程序开发工具SECTIONS指令语法输入段

用文件名和段名来规定输入段。

SECTIONS{.text:/*创建.text输出段*/{

f1.obj(.text)/*链接来自f1.obj文件中的.text段*/

f2.obj(sec1)/*链接来自f2.obj文件中的sec1段*/

f3.obj/*链接来自f3.obj文件中的所有段*/

f4.obj(.text,sec2)/*链接f4.obj文件中的.text段和sec2段*/}}DSP原理及应用78第6章汇编语言程序开发工具SECTIONS指令语法输入段(默认情况)

SECTIONS{.text:.data:.bss:

}链接时:在输入文件中的所有.text段链接成.text输出段所有.data段链接成.data输出段所有.bss段链接成.bss输出段DSP原理及应用79第6章

温馨提示

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

评论

0/150

提交评论