3765|3

2781

帖子

417

TA的资源

五彩晶圆(中级)

楼主
 

《TMS320C28x系列DSP》读书笔记--通用目标文件格式,段 [复制链接]



      TMS320系列DSP的目标文件各式为通用目标文件格式 COFF (Command Object File Format,简称COFF)。
采用这种目标文件各式的优点是:将指令和数据按照段的概念进行组织和存储,这使得程序的可读性大大增强,更容易编写程序,更便于进行程序的移植,更利用进行模块化的程序设计,为管理代码段及系统存储器提供了灵活的方法和手段。段(sections)是COFF文件中最重要的概念,它是目标文件中的最小单元。所谓“段”就是通过汇编和连接后最终在TMS320存储器映象中占据连续空间的一块代码或数据。目标文件中的每一个段都是相互独立的。 COFF目标文件的段可以分为两大类:
已初始化段:包含数据和代码。
未初始化段:在存储印象中为未初始化数据保留空间。
  一般地,COFF目标文件包含3个默认(缺省)的段:
   text段、data段、bss段。如下所示为目标文件中的段与目标系统中存储器的关系。段的使用非常灵活,但常用以下约定:
.text — 此段包含可执行程序代码。
.data — 此段包含已初始化的数据。
.bss  — 此段包含未初始化的变量。
.sect  '名称' — 定义一个有名段,放初始化了的数据或程序代码。


重定位:连接器的功能之一是把段重新定位到目标系统的存储映像中。



1.未初始化段
         未初始化段主要用来在TMS320C28X存储器中保留空间,通常将它们定位到RAM中。这些段在目标文件中没有实际内容,只是保留空间而已。程序可以在运行时利用这些空间建立和存储变量。未初始化段是通过使用.bss和.usect汇编伪指令建立的,两条伪指令的句法分别为:
  •     .bss         symbol,字数
  •     symbol  .usect“段名”,字数

2.已初始化段
已初始化段包含可执行代码或已初始化数据。这些段的内容存储在目标文件中,加载程序时再放到TMS320C28X存储器中。三个用于建立初始化段的伪指令句法分别为:
  •      .text        [段起点]
  •      .data        [段起点]
  •      .sect        “段名”[,段起点]




3.已命名段
已命名段就是程序员自己定义的段,它与默认的.text、.data和.bss段一样使用,但与缺默认段分开汇编。 data段不同的存储器中,将未初始化的变量汇编到与.bss段不同的存储器中。产生命名段的伪指令为:
  •      symbol   .usect        “段名”,字数
  •     .sect        “段名”[,段起点]

注:如果在程序中没有编写分段的任何指令,则汇编程序将把所有程序段和数据段都汇编至.text段中。


4.子段
子段(Subsections)是大段中的小段。链接器可以像处理段一样处理子段。子段的命名句法为:

  • 基段名:子段名

例:用户用下列代码创建一个.text 段内的叫做——func 的字段

.sect ".text:_func"
子段也有两种,用.sect命令建立的是已初始化段,用.usect命令建立的是未初始化段。
  • symbol .usect "段名",字数
  •              .sect "段名"


5.段程序计数器(SPC)
汇编器为每个段安排一个独立的程序计数器,即段程序计数器(SPC)。SPC表示一个程序代码段或数据段内的当前地址。开始时,汇编器将每个SPC置0,当汇编器将程序代码或数据加到一个段内时,相应的SPC增加。如果汇编器再次遇到相同段名的段,继续汇编至相应的段,且相应的SPC在先前的基础上继续增加。

链接器对段的处理有两个功能。首先,它将汇编器产生的COFF目标文件(.obj文件)中的各种段作为输入段,当有多个文件进行链接时,它将输入段组合起来,在可执行的COFF输出模块中建立各个输出段。其次,链接器为输出段选择存储器地址。

链接器有两个伪指令完成上述功能,即:
MEMORY 命令——定义目标系统的存储器配映像,包括对存储器各部分的命名,以及规定它们的起始地址和长度。
SECTIONS命令——告诉链接器如何将输入段组合成输出段,以及在存储器何处存放输出段。子段可以用来更精确地编排段,可用链接器SECTIONS命令指定子段。



重定位

1.链接时重新定位
  • 将各个段定位到存储器中,每个段都从合适的地址开始。
  • 将符号值调整到相对于新的段地址的数值。
  • 调整对重新定位后符号的引用。
2.运行时重新定位
将代码装入存储器的一个地方,而运行在另一个地方。利用SECTIONS命令选项让链接器定位两次。
链接器提供了一个简单的处理该问题的方法。利用SECTIONS命令选项让链接器定位两次。第一次使用装入关键字设置装入地址(load),再用运行关键字设置运行地址(run)。

COFF文件中的符号
外部符号指在一个模块中定义,在另一个模块中使用的符号。可使用.def、.ref或.global汇编伪指令将符号定义为外部符号。

  • .def在当前模块中定义,可以在别的模块中使用的符号;
  • .ref在当前模块中引用,但在别的模块中定义的符号;
  • .global可用于以上任何一种情况。


[ 本帖最后由 qinkaiabc 于 2012-12-7 15:24 编辑 ]

最新回复

这是个好资料,顶一个  详情 回复 发表于 2012-12-9 21:04
 
点赞 关注
个人签名

回复
举报

1万

帖子

28

TA的资源

裸片初长成(高级)

沙发
 
好文章

了解这些就知道了CCS的存储器分配情况,就会CMD文件的编写了

点评

斑竹,多多指教啊:victory:  详情 回复 发表于 2012-12-8 11:56
 
 

回复

2781

帖子

417

TA的资源

五彩晶圆(中级)

板凳
 

回复 沙发 dontium 的帖子

斑竹,多多指教啊
 
个人签名
 
 

回复

2606

帖子

0

TA的资源

五彩晶圆(初级)

4
 
这是个好资料,顶一个
 
个人签名工程 = 数学+物理+经济
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表