DSP的CMD文件

合集下载

DSP_CMD文件中的各个段解释

DSP_CMD文件中的各个段解释

CMD文件里有两个基本的段:初始化段和非初始化段。

初始化段包含代码和常数等必须在DSP上电之后有效的数。

故初始化块必须保存在如片内FLASH等非易失性存储器中,非初始化段中含有在程序运行过程中才像变量内写数据进去,所以非初始化段必须链接到易失性存储器中如RAM。

已初始化的段:.text,.cinit,.const,.econst,.pinit和.switch...text:所有可以执行的代码和常量.cinit:全局变量和静态变量的C初始化记录,包含未用const声明的外部(extern)或静态(static)数据表.const:包含字符串常量和初始化的全局变量和静态变量(由const)的初始化和说明.econst:包含字符串常量和初始化的全局变量和静态变量(由far const)的初始化和说明,与.const不同的是.const分配范围被限制在低64K 16位数据区,而.econst的分配范围是4M 22位数据区.pinit:全局构造器(C++)程序列表.switch:包含switch声明的列表非初始化的段:.bss,.ebss,.stack,.sysmem,和esysmem.(更好的理解就是,这些段就是存储空间而已).bss: 为全局变量和局部变量保留的空间,在程序上电时.cinit空间中的数据复制出来并存储在.bss空间中。

.ebss:为使用大寄存器模式时的全局变量和静态变量预留的空间,在程序上电时,cinit空间中的数据复制出来并存储在.ebss中,与.bss不同的是.bss分配范围被限制在低64K 16位数据区,而.ebss的分配范围是4M 22位数据区.stack:为系统堆栈保留的空间,用于和函数传递变量或为局部变量分配空间。

.sysmem:为动态存储分配保留的空间。

如果有宏函数,此空间被宏函数占用,如果没有的话,此空间保留为0 .esysmem:为动态存储分配保留的空间。

如果有far函数,此空间被相应的占用,如果没有的化,此空间保留为0.编译器生成的包含代码和数据的多个部分,称为段。

CCS中CMD文件的作用

CCS中CMD文件的作用

CCS中CMD文件的作用cmd 文件用于DSP 代码的定位。

由于DSP 的编译器的编译结果是未定位的,DSP没有操作系统来定位执行代码,每个客户设计的DSP 系统的配置也不尽相同,因此需要用户自己定义代码的安装位置。

安装位置是指,编译完成的代码是存放在dsp的那个位置,程序空间RAM或者数据空间RAM,起始地址以及长度。

以C5000 为例,基本格式为:-o sample.out //生成.OUT文件-m sample.map //生成MAP文件,MAP文件中包含程序的section信息,用于自举表信息的编写和烧写flash-stack 100 //开辟堆栈sample.obj meminit.obj-l rts.lib //链接rts.lib库MEMORY{PAGE 0: VECT: origin = 0xff80, length 0x80 //page0一般是程序空间,PAGE 0: PROG: origin = 0x2000, length 0x400PAGE 1: DATA: origin = 0x800, length 0x400 //page1一般是数据空间}SECTIONS{.vectors : {} >VECTPAGE 0 //.vectors段是中断向量表,存放在程序空间VECT部分//.text : {} >PROG PAGE 0 // .text 是程序段,放在程序空间PROG部分.data : {} >PROG PAGE 0 //.data是数据段,放在程序空间PROG部分,紧接.text 之后.cinit : {} >PROG PAGE 0 //.cinit 段包含了变量初始化记录.bss : {} >DATA PAGE 1 //.bss段是未初始化段,放在数据空间DATA部分}连接器会自动创建以下的段:The C54x compiler creates the following sections:初始化段包含数据和可执行代码。

DSP的CMD文件详解(整理版)

DSP的CMD文件详解(整理版)

DSP的CMD文件详解CMD是用来分配ROM和RAM空间用的,告诉链接程序怎样计算地址和分配空间。

所以不同的芯片就有不同大小的ROM和RAM,存放用户程序的地方也不尽相同。

所以要根据芯片进行修改,分为 MEMORY 和SECTIONS两个部分。

MEMORY{PAGE 0 ..........PAGE 1.........}SECTIONS{.vectors ..................reset .................................}MEMORY是用来指定芯片的ROM和RAM的大小和划分出几个区间。

PAGE 0对应ROM, PAGE 1对应RAM。

PAGE 里包含的区间名字与其后面的参数反映了该区间的起始地址和长度。

SECTIONS:(在程序里添加下面的段名,如.vectors。

用来指定该段名以下,另一个段名以上的程序(属于PAGE0)或数据(属于PAGE1)放到“>”符号后的空间名字所在的地方。

){.vectors : { } > VECS PAGE 0.reset : { } > VECS PAGE 0..................................}eg:MEMORY{PAGE 0:VECS :origin = 00000h, length = 00040h LOW :origin = 00040h, length = 03FC0h SARAM :origin = 04000h, length = 00800h B0 :origin = 0FF00h, length = 00100h PAGE 1:B0 :origin = 00200h, length = 00100h B1 :origin = 00300h, length = 00100h B2 :origin = 00060h, length = 00020h SARAM :origin = 08000h, length = 00800h }{.text : { } > LOW PAGE 0.cinit : { } > LOW PAGE 0.switch : { } > LOW PAGE 0.const : { } > SARAM PAGE 1.data : { } > SARAM PAGE 1.bss : { } > SARAM PAGE 1.stack : { } > SARAM PAGE 1.sysmem : { } > SARAM PAGE 1}由三部分组成:①输入/输出定义:这一部分,可以通过ccs的“BuildOption........”菜单设置: .obj(链接的目标文件)、.lib(链接的库文件)、.map(生成的交叉索引文件)、.out(生成的可执行代码)。

DSP的CMD文件写法综述

DSP的CMD文件写法综述
.reset : { } > VECS PAGE 0
..........
}
它分成两个基本的部分:
(1)被初始化的Section(包含数据表和可执行代码)
.text:它包含所有的可执行代码和常数,必须放在程序页
.cinit:它包含初始化的变量和常量表,要求放在程序页
2、Section块用来控制段的构成与地址分配。对于不同的系统配置,Section的分配方式也不相同,链接器通过Section来控制地址的分配,所以Section的分配成了配置.cmd文件的重要环节。
SECTIONS
{
.vectors : { } > VECS PAGE 0
.system:动态存储器分配保留空间,这个空间用于malloc函数,如果不使用malloc函数,这个段的大小就是0。要求放在低地址的数据页。
.esystem:动态存储器分配保留空间,这个空间用于外部malloc函数,如果不使用外部malloc函数,这个段的大小就是0。可也放在数据页的任何地方
.text : { } > PROG PAGE 0 //代码
.cinit : { } > PROG PAGE 0
.bss : { } > SARAM PAGE 1 //块B2
.const : { } > SARAM PAGE 1 //块B2
}
SECTIONS
{
.reset : { } > VECS PAGE 0 //复位中断向量
.vectors : { } > VECS PAGE 0 //中断向量表
.pvecs : { } > PVECS PAGE 0 //外围模块中断向量表

DSP关于CMD文件报告

DSP关于CMD文件报告

DSP关于CMD文件报告姓名:班级:通信二班学号:一、简介:本报告基于“《DSP原理及应用》实验指导书”第29页的CMD文件,简要介绍其中涉及的CMD文件的知识、该CMD文件各个语句的含义,并给出了注释。

二、原理:1.链接命令文件以后缀.cmd结尾,简称CMD文件。

CMD文件的作用就像货物摆放记录一样,为程序代码和数据分配存储空间。

CMD文件的两大主要功能是通过MEMORY伪指令来指示存储空间和通过SECTION伪指令来分配段到存储空间。

其中PAGE0表示程序空间,PAGE1表示数据空间。

要读懂CMD文件要结合附录中的图1来看。

2.本程序中通过MEMORY伪指令分配了四个属性为只读的程序空间:PROG,BOOT,RESET,VECTORS;四个属性为既可读又可写的数据空间:M0RAM,M1RAM,L0L1RAM,H0RAM。

3..reset :> RESET, PAGE =0语句中,.reset是段名,“:>”是load,装载载的意思,RESET是空间名称,PAGE=0表示该空间是程序空间。

整句话的意思是将段.reset所对应的的程序装载到名为RESET的程序空间中。

SECTIONS中的语句都可套用这种格式理解。

三、CMD文件注释:-l rts2800_ml.lib-stack 400h-heap 400hMEMORY//MEMORY伪指令来指示存储空间{PAGE 0 : PROG(R) : origin = 0x3E8000, length = 0x10000/*空间名为PROG的只读程序空间,起始地址为0x3E8000,终止地址是0x3F8000,空间长度是0x10000,位于图1的片内flash处*/PAGE 0 : BOOT(R) : origin = 0x3FF000, length = 0xFC0 /*空间名为BOOT的只读程序空间,起始地址为0x3FF000,终止地址是0x3FFFC0,空间长度是0xFC0,位于图1的Boot Rom处*/PAGE 0 : RESET(R) : origin = 0x3FFFC0, length = 0x2 /*空间名为RESET的只读程序空间,起始地址为0x3FFFC0,终止地址是0x3FFFC2,空间长度是0x2,,位于图1的Boot Rom处*/PAGE 0 : VECTORS(R) : origin = 0x3FFFC2, length = 0x3E/*空间名为VECTORS的只读程序空间,起始地址为0x3FFFC2,终止地址是0x400000,空间长度是0x3E,位于图1的Boot Rom处*/PAGE 1 : M0RAM(RW) : origin = 0x000000, length = 0x400/*空间名为M0RAM的既可读又可写数据空间,起始地址为0x000000,终止地址是0x000400,空间长度是0x400,共1K,位于图1的M0 SRAM处*/PAGE 1 : M1RAM(RW) : origin = 0x000400, length = 0x400/*空间名为M1RAM的既可读又可写数据空间,起始地址为0x000400,终止地址是0x000800,空间长度是0x400,共1K,位于图1的M1 SRAM处*/PAGE 1 : L0L1RAM(RW) : origin = 0x008000, length = 0x2000/*空间名为L0L1RAM的既可读又可写数据空间,起始地址为0x008000,终止地址是0x00A000,空间长度是0x2000,共8K,位于图1的L0 SRAM和L1 SRAM处*/PAGE 1 : H0RAM(RW) : origin = 0x3F8000, length = 0x2000/*空间名为H0RAM的既可读又可写数据空间,起始地址为0x3F8000,终止地址是0x3FA000,空间长度是0x2000,共8K,位于图1的H0 SRAM处*/}SECTIONS//SECTIONS伪指令来将段分配到存储空间中去{/* 22-bit program sections */.reset : > RESET, PAGE = 0/*将复位指令存放于程序空间的RESET空间中*/vectors : > VECTORS, PAGE = 0/*将向量存放于程序空间的VECTORS空间中*/.pinit : > PROG, PAGE = 0 /*将生成的全局构造器(C++)程序列表存放于程序空间的PROG空间中*/.cinit : > PROG, PAGE = 0/*将对全局和静态变量初始化的常数存放于程序空间的PROG空间中*/.text : > PROG, PAGE = 0/*编译C语言中的语句时,生成的汇编指令存放于程序空间的PROG空间中*//* 16-Bit data sections */.const : > L0L1RAM, PAGE = 1/*将初始化和说明的字符串常量和静态变量(由const 声明)存放于数据空间的L0L1RAM数据空间中*/.bss : > L0L1RAM, PAGE = 1/*为全局变量和局部变量保留的空间,即在程序上电时,cinit空间中的数据复制出来并储存在L0L1RAM数据空间中*/.stack : > M1RAM, PAGE = 1/*为系统堆栈保留的空间,即当用到函数传递和局部变量时,数据会存放在M1RAM数据空间中*/.sysmem : > M0RAM, PAGE = 1 /*如果有宏函数,则与宏函数有关的动态数据会存放到M0RAM数据空间中*//* 32-bit data sections */.ebss : > H0RAM, PAGE = 1/*为使用大寄存器模式时的全局变量和静态变量预留的空间,即在程序上电时,.cinit空间中的数据会复制出来并存储在H0RAM数据空间中*/.econst : > H0RAM, PAGE = 1/*将初始化和说明的字符串常量和静态变量(由far const 声明)存放于数据空间的H0RAM数据空间中*/.esysmem : > H0RAM, PAGE = 1/*如果有far函数,则与far函数有关的动态数据会存放到H0RAM数据空间中*/}结束语:在初次接触CMD文件的时候,我感到很迷茫。

DSP TMS320C6000基础学习(4)_cmd文件分析

DSP TMS320C6000基础学习(4)_cmd文件分析

DSP中的CMD文件是链接命令文件(Linker Command File),以.cmd为后缀。

在分析cmd文件之前,必需先了解(1)DSP具体芯片的内存映射(Memory Map)(2)知道点链接的知识,知道C程序中段的概念(3)知道RAM,Flash等存储模块的区别====================================================================== 1. coff目标文件====================================================================== coff是一种流行的二进制可执行文件格式,在CCS v5中扩展名为.out,可以直接下载到芯片中。

可执行文件包括段头、可执行代码、初始化数据、可重定位信息和符号表字符串表等信息。

编译器处理段的过程为:(1)把每个源文件都编译成独立目标文件(.obj),每个目标文件都有自己的段(2)链接器将目标文件中相同段名的部分连接在一起,生成最终的coff可执行文件CCS v5中的Compile Files完成功能(1),Build完成功能(2)。

====================================================================== 2. TMS320C6713内存映射============================================================================================================================================3. 自定义代码段和数据段======================================================================// 将symbol分配到section name指示的数据段#pragma DATA_SECTION(symbol, "section name");// 将symbol分配到section name指示的代码段#pragma CODE_SECTION(symbol, "section name");常常结合结构体定义symbol,如下,1.volatile struct Symbol symbol; // Symbol预先定义好的描述特定外设的结构复制代码比如,对于C6713中的Timer0外设,做如下定义,1.<span style="line-height: 1.5;">struct Timer0 { </span>2. ...3.}4.#pragma DATA_SECTION(C6713_Timer0, "C6713_Timer0_cmd");5.volatile struct Timer0 C6713_Timer0;6.7."C6713_Timer0_cmd"将在cmd文件中分配空间。

DSP_CCS工程中cmd文件的作用与解析说明

DSP_CCS工程中cmd文件的作用与解析说明

首先CCS是针对TI公司DSP芯片程序开发用的,DSP会涉及到很多存储器,而CMD 文件正是用于描述工程对DSp存储器的管理、分配和使用的情况(度娘中搜到的!)。

对于存储器,分为易失性存储器和非易失性存储器,当然易失性和读写速度是一对矛盾,然而对于不同场合我们选择不同的存储器,例如程序代码需要保存在非易失性存储器中,而易失性存储器需要放置一些正在运行的程序,因为运行的程序需要很快的读写速度。

然后我们所说的CMD文件就是围绕着这个问题展开的,CMD文件就是面向用户进行存储器控制的声明,好吧目前为止也只是抽象的。

这些声明有两方面的内容:
1、声明整个存储器资源
2、如何分配这些资源
Cmd文件是在编译源程序生成机器码的过程中产生作用的,其实就是告诉编译器,存储器这么些,就是这么分配的!
Cmd编写之资源清单
这是第一条内容的编写规则。

MEMORY是关键字,就像图书馆名字,PAGE n是图书的分类,习惯上PAGE 0为程序空间,PAGE 1为数据空间,接下来就是更小的分类,如历史类分为清史、汉室、近代史等等。

后面的org和length就是开始地址和长度了
Cmd编写之资源分配
DSP有程序空间存储和数据空间存储之分,首先以setion为开头,声明段的名字如,.boot .text .data并指向上述的xxx或者aaa。

DSP入门之--CMD文件配置详解

DSP入门之--CMD文件配置详解

DSP入门之--CM D文件配置详解1 C MD文件的分配方法TI公司新的汇编器和链接器创建的目标文件采用一种COFF(通用目标文件格式),该目标文件格式更利于模块化编程,为管理代码段和目标系统存储器提供了强有力和灵活的编程方法。

用户可以通过编写链接命令文件(.cmd文件)将链接信息放在一个文件中,以便在多次使用同样的链接信息时调用。

在命令文件中使用两个十分有用的伪指令ME MORY和SECTIONS,来指定实际应用中的存储器结构和进行地址的映射。

Memo ry用来指定目标存储器结构,Memo ry下可以通过PAGE选项配置地址空间,链接器把每一页都当作一个独立的存储空间。

通常情况下,PA GE0代表程序存储器用来存放程序,PA GE1代表数据存储器,用来存放数据。

由编译器生成的可重定位的代码和数据块叫做“SECTIONS”(段),SECTIONS用来控制段的构成与地址分配。

对于不同的系统配置,“SECTION”的分配方式也不相同,链接器通过“SECTIONS”来控制地址的分配,所以“SECTIONS”的分配就成了配置.cmd文件的重要环节。

以下是对“SE CTIONS”的定义及分配的详细介绍。

(1)被初始化的“SECTI ONS”(包括数据表和可执行代码).te xt它包括所有的可执行代码和常数,必须放在程序页;.cinit 它包括初始化的变量和常量表,要求放在程序页;.pinit它包括全局构造器(C++)初始化的变量和常量表,要求放在程序页;.const它包括字符串、声明、以及被明确初始化过的全局和静态变量,要求放在低地址的数据页;.econst它是在使用大存储器模式时使用的,包括字符串、声明、以及被明确初始化过的全局变量和静态变量,可以放在数据页的任何地方。

.switch它包括为转换声明设置的表格,可以放在程序页也可以放在低地址的数据页。

(2)未被初始化的“SECTIONS”(为程序运行中创建和存放的变量在存储器中保留空间).bss它为全局变量和静态变量保留空间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DSP的CMD文件2010-03-27 12:48DSP的存储器的地址范围,CMD是主要是根据那个来编的。

CMD 它是用来分配rom和ram空间用的,告诉链接程序怎样计算地址和分配空间.所以不同的芯片就有不同大小的rom和ram.放用户程序的地方也不尽相同.所以要根据芯片进行修改.分两部分.MEMORY和SECTIONS.MEMORY{ PAGE 0 ..........PAGE 1.........}SECTIONS{SECTIONS{.vectors ..................reset .................................}MEMORY是用来指定芯片的rom和ram的大小和划分出几个区间.PAGE 0 对应romAGE 1对应ramPAGE 里包含的区间名字与其后面的参数反映了该区间的起始地址和长度. SECTIONS:(在程序里添加下面的段名如.vectors.用来指定该段名以下,另一个段名以上的程序(属于PAGE0)或数据(属于PAGE1)放到“>”符号后的空间名字所在的地方。

SECTIONS{.vectors : { } > VECS PAGE 0.reset : { } > VECS PAGE 0..................................}eg:MEMORY{PAGE 0: VECS: origin = 00000h,length= 00040hLOW: origin = 00040h,length= 03FC0hSARAM: origin = 04000h,length= 00800hB0: origin = 0FF00h,length= 00100hPAGE 1: B0: origin = 00200h,length= 00100hB1: origin = 00300h,length= 00100hB2: origin = 00060h,length= 00020hSARAM: origin = 08000h,length= 00800h}SECTIONS{.text : { } >LOW PAGE 0.cinit : { } >LOW PAGE 0.switch : { } >LOW PAGE 0.const : { } > SARAM PAGE 1.data : { } > SARAM PAGE 1.bss : { } > SARAM PAGE 1.stack : { } > SARAM PAGE 1.sysmem : { } > SARAM PAGE 1}由三部分组成:输入/输出定义:这一部分,可以通过ccs的“Build Option........”菜单设置。

obj 链接的目标文件。

lib 链接的库文件。

map 生成的交叉索引文件。

out 生成的可执行代码MEMORY命令:描述系统实际的硬件资源SECTION命令:描述“段”如何定位例子.cmd文件-c-o hello.out-m hello.map-stack 100-l rts2xx.libMEMORY{PAGE 0: VECT:origin=0x8000,length 0x040PAGE 0: PROG:origin=0x8040,length 0x6000PAGE 1: DATA:origin=0x8000,length 0x400}SECTIONS{.vextors >VECT PAGE 0.text >PROG PAGE 0.bss >DATA PAGE 1.const >DATA PAGE 1}存储模型:c程序的代码和数据如何定位系统定义.cinit 存放程序中的变量初值和常量.const 存放程序中的字符常量、浮点常量和用const声明的常量.switch 存放程序中switch语句的跳转地址表.text 存放程序代码.bss 为程序中的全局和静态变量保留存储空间.far 为程序中用far声明的全局和静态变量保留空间.stack 为程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果.sysmem 用于程序中的malloc 、calloc 、和realoc 函数动态分配存储空间CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件,其中比较关键的就是MEMORY和SECTIONS两个伪指令的使用,常常令人困惑,系统出现的问题也经常与它们的不当使用有关。

CCS是DSP软件对DOS系统继承的开发环境,CCS的命令文件经过DOS命令文件长时间的引申发展,已经变得非常简洁(不知道TI文档有没有详细CMD配置说明)。

我学CMD是从DOS里的东西开始的,所以也从DOS环境下的CMD说起:1命令文件的组成命令文件的开头部分是要链接的各个子目标文件的名字,这样链接器就可以根据子目标文件名,将相应的目标文件链接成一个文件;接下来就是链接器的操作指令,这些指令用来配置链接器,接下来就是MEMORY和SECTIONS两个伪指令的相关语句,必须大写。

MEMORY,用来配置目标存储器,SECTIONS用来指定段的存放位置。

结合下面的典型DOS环境的命令文件link.cmd来做一下说明:file.obj //子目标文件名1file2.obj //子目标文件名2file3.obj //子目标文件名3- o prog.out //连接器操作指令,用来指定输出文件- m prog.m //用来指定MAP文件MEMORY{ 略}SECTIONS{ 略}otherlink.cmd本命令文件link.cmd要调用的otherlink.cmd等其他命令文件,则文件的名字要放到本命令文件最后一行,因为放开头的话,链接器是不会从被调用的其他命令文件中返回到本命令文件。

2 MEMORY伪指令MEMORY用来建立目标存储器的模型,SECTIONS指令就可以根据这个模型来安排各个段的位置,MEMORY指令可以定义目标系统的各种类型的存储器及容量。

MEMORY的语法如下:MEMORY{PAGE 0 : name1[(attr)]: origin = constant,length= constantname1n[(attr)]: origin = constant,length= constantPAGE 1 : name2[(attr)]: origin = constant,length= constantname2n[(attr)]: origin = constant,length= constantPAGE n : namen[(attr)]: origin = constant,length= constantnamenn[(attr)]: origin = constant,length= constant}PAGE关键词对独立的存储空间进行标记,页号n的最大值为255,实际应用中一般分为两页,PAGE0程序存储器和PAGE1数据存储器。

name存储区间的名字,不超过8个字符,不同的PAGE上可以出现相同的名字(最好不用,免的搞混),一个PAGE内不许有相同的name。

attr的属性标识,为R表示可读;W可写X表示区间可以装入可执行代码;I表示存储器可以进行初始话,什么属性代码也不写,表示存储区间具有上述的四种属性,基本上我们都选择这种写法。

origin:略。

length:略。

下面是经常用的2407的简单写法大家参考,程序从0x060开始,要避开加密位,不从0x0044开始更可靠一点,此例中的同名的页可以只写第一个,其后省略,但写上至少安全一点:MEMORY{PAGE 0: VECS: origin = 0x0000,length 0x40PAGE 0: PROG: origin = 0x0060,length 0x6000PAGE 1: B0 : origin = 0x200,length 0x100PAGE 1: B1 : origin = 0x300,length 0x100PAGE 1: DATA: origin = 0x0860,length 0x0780}3 SECTIONS伪指令SECTIONS指令的语法如下:SECTIONS{.text: {所有.text输入段名} load=加载地址run =运行地址.data: {所有.data输入段名} load=加载地址run =运行地址.bss: {所有.bss输入段名} load=加载地址run =运行地址.other: {所有.other输入段名} load=加载地址run =运行地址}SECTIONS必须用大写字母,其后的大括号里是输出段的说明性语句,每一个输出段的说明都是从段名开始,段名之后是如何对输入段进行组织和给段分配存储器的参数说明:以.text段的属性语句为例,“{所有.text输入段名}”这段内容用来说明连接器输出段的.text段由哪些子目标文件的段组成,举例如下SECTIONS{.text:{ file1.obj(.text) file2(.text) file3(.text,cinit)}略}指明输出段.text要链接file1.obj的.text和file2的.text 还有file3的.text和.cinit。

在CCS的SECTIONS里通常只写一个中间没有内容的“{ }”就表示所有的目标文件的相应段接下来说明“load=加载地址run =运行地址”链接器为每个输出段都在目标存储器里分配两个地址:一个是加载地址,一个是运行地址。

通常情况下两个地址是相同的,可以认为输出段只有一个地址,这时就可以不加“run =运行地址”这条语句了;但有时需要将两个地址分开,比如将程序加载到FLASH,然后放到RAM 中高速运行,这就用到了运行地址和加载地址的分别配置了,如下例所示:.const :{略} load = PROG run = 0x0800常量加载在程序存储区,配置为在RAM里调用。

“load=加载地址”的几种写法需要说明一下,首先“load”关键字可以省略,“=”可以写成“>”,“加载地址”可以是:地址值、存储区间的名字、PAGE关键词等,所以大家见到“.text:{ } >0x0080”这样的语句可千万不要奇怪。

“run =运行地址”中的“ =”可以用“>”,其它的简化写法就没有了。

大家不要乱用。

4 CCS中的案例在CCS中的命令文件好像简化了不少,少了很多东西,语句也精简了好多,首先不用指定输入链接器的目标文件,CCS会自动默认处理,其次链接器的配置命令也和DOS的环境不同,需要了解的请找TI文档吧!下面是刘和平书中的例子,大家来看看是不是可以很精确的理解了呢!-stack 40MEMORY{PAGE 0 : VECS : origin = 0h ,length= 40hPVECS : origin = 40h ,length= 70hPROG : origin = 0b0h ,length= 7F50hPAGE 1 : MMRS : origin = 0h ,length= 05FhB2 : origin = 0060h ,length= 020hB0 : origin = 0200h ,length= 100hB1 : origin = 0300h ,length= 100hSARAM : origin = 0800h ,length= 0800hEXT : origin = 8000h ,length= 8000h}SECTIONS{.reset : { } > VECS PAGE 0.vectors : { } > VECS PAGE 0.pvecs : { } > PVECS PAGE 0.text : { } > PROG PAGE 0.cinit : { } > PROG PAGE 0.bss : { } > SARAM PAGE 1.const : { } > SARAM PAGE 1.stack : { } > B1 PAGE 1}第二章CMD文件的编写1. COFF格式1>通用目标文件格式(Common Object File Format)是一种流行的二进制可执行文件格式,二进制可执行文件包括库文件(lib),目标文件(obj)最终可执行文件(out)。

相关文档
最新文档