社区导航

 

搜索
查看: 148|回复: 0
打印 上一主题 下一主题

[资料分享] TI_DSP链接命令文件(*。cmd)的介绍

[复制链接]

2246

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

跳转到指定楼层
楼主
发表于 2019-7-6 23:28 | 只看该作者 |倒序浏览 |阅读模式

     一个完整的DSP程序至少包含三个部分:程序代码、中断向量表、链接命令文件(或称链接配置文件)(*.cmd)。

      链接配置文件确定了程序链接成最终可执行代码时的选项,其中有很多条目,实现不同方面的选项,其中最常用的也是必须的有两条:1。存贮器的分配;2。标明程序入口。如:

-e CodeStart

MEMORY {

page 0: PRAM: org="0100h" len="0F00h"

 

}

SECTIONS{

.text:>PRAM page 0

 

}

 

      由于每个程序都需要一个链接配置文件,可以编写一个满足通常需要的链接配置文件。一个比较通用的链接配置文件:

 

-e CodeStart

-m map。map  

MEMORY {

PAGE 0: VECT: org=0080h len="0080h"

PARAM: org="100h" len="0F00h"

PAGE 1: DARAM: org="1000h" len="1000h"

}

SECTIONS {

.text :> PARAM PAGE 0

.vectors :> VECT PAGE 0

stack :> DARAM PAGE 1

。bss :> DARAM PAGE 1

。data :> DARAM PAGE 1

}

 

      MEMORY伪指令在命令文件中的书写方式为:以大写MEMORY开始,后面跟着由大括号括起来的一系列存储器范围说明。每一个存储器区间具有一个名称、起始地址以及存储器的长度。下面的实例为实用MEMORY伪指令的简单例子。在该例中,起始地址为数据存储器中的60H;B1块为256字节的RAM,起始地址为数据存储器中的200H;B0块为256字节的RAM,起始地址为数据存储器中的300H。

MEMORY

{

PAGE0: ROM: origin=0h,length=1000h

PAGE1: B2: origin=60h,length=20h

B1: origin=200h,length=100h

B0: origin=300h,length=100h

}

 

MEMORY伪指令的一般语法为:

MEMORY

{

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

PAGE1:name n[(attr)]: origin="constant",length=constant

}

其中,PAGE:对一个存储空间加以标记,每一个PAGE代表一个完全独立的地址空间。页号n最大可以为255(因为DSP最大寻址可以到64K),取决于目标存储器的配置。通常PAGE0为程序存储器,PAGE1为数据存储器。如果没有规定的PAGE,则链接器就当作PAGE0。

Name:对一个存储器区间名。可以包含8个字符。只是起到标记的作用。同一个PAGE内不能重名,不同PAGE可以。

Attr:这是一个任选项。为命名区规定1-4个属性。如果有选项,应写在括号内。当输出段定位到存储器时,可以利用属性加以限制。属性选项有如下四项:

R:规定可以对存储器执行读操作。

W:规定可以对存储器执行写操作。

X:规定存储器可以装入可执行的程序代码。

I:规定可以对存储器进行初始化。

如果一项属性都没有选,则可以将输出段不受限制定位到任何一个存储器位置。就是任何一个没有规定的存储器都有四项属性。

Origin:规定一个存储区的起始地址。

Length:规定一个存储区的长度。

 

SECTION指令:

1、SECTIONS指令任务:

(1)说明如何将输入段组合成输出段;

(2)在可执行程序中定义输出段;

(3)指定输出段在存储器中的存放位置;

(4)允许重新命名输出段。

2、SECTIONS指令的一般语法如下:

SECTIONS

{

name:[property,property,property,……]

name:[property,property,property,……]

name:[property,property,property,……]

……

}

在链接器命令文件中,SECTIONS命令用大写字母,紧随其后并用大括号括起来的是关于输出段的说明语句。每一个输出段的说明都从段名开始,段名后是一行说明段的内容和如何给段分配存储单元的属性参数。一个段的属性参数包括:

(1) Load allocation,由它定义将输出段加载到存储器中的什么位置。语法为:

Load=allocation(这里的allocation指的是地址)

或者> allocation

其中allocation是关于输出段地址的说明,即给输出段分配存储单元。具体写法有多种,例如:

.text:load=0x1000 ;将输出段.text定位到一个特定的地址

.text:load>ROM ;将输出段.text定位到命名为ROM的存储区

.text: PAGE 0 ;将输出段定位到PAGE 0

(2) Run allocation,由它定义输出段在存储器的什么开始运行。其语法为:

run=allocation 或者

run>allocation

链接器为每个输出段在目标存储器中分配两个地址:一个是加载的地址,另一个是执行程序的地址。通常,这两个地址是相同的,可以认为每个输出段只有一个地址。有事要想吧程序的加载区和运行区分开,只要用SECTIONS命令让链接器对这个段定位两次就行了。一次是设置加载地址,另一次是设置运行地址。例如:

.fir:load=ROM,run=RAM

.data:load=ROM,align=32,run=RAM

3、为输出段指定地址

(1) binding,将段定位到指定的地址。例如:

.text:load=0x1000

(2) memory,将段定位到由MEMORY伪指令定义的具有指定的名称(例如ROM)或属性的地址范围。例如:

.text:load>ROM

(3) alignment,使用对准关键字,指定段的其实地址边界。例如:

。text:align=0x80

(4) blocking,使用块关键字指定段必须放置在2个地址边界之间,若段太大,将从一个地址边界开始。例如:

.text:block(0x80)

(5) page,指定要使用的存储器页面。例如:

。text:PAGE 0

4、MEMORY和SECTIONS指令的默认算法

如果没有利用MEMORY和SECTIONS命令,链接器就按缺省算法来定位输出段



您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /1 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( )

GMT+8, 2019-7-22 11:58 , Processed in 0.074041 second(s), 16 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表
极速赛车APP下载 极速赛车双面盘 极速赛车手机官网 极速赛车手机官网 极速赛车双面盘 极速赛车手机官网 极速赛车手机版下载 极速赛车手机版下载 极速赛车手机版下载 极速赛车APP