2系列DSP学习笔记 1.cmd文件编写_第1页
2系列DSP学习笔记 1.cmd文件编写_第2页
2系列DSP学习笔记 1.cmd文件编写_第3页
2系列DSP学习笔记 1.cmd文件编写_第4页
2系列DSP学习笔记 1.cmd文件编写_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

1、1·什么是CMD文件,它有什么作用。CMD文件是用来说明对应的对应的代码、数据、变量的存放空间。它包括两个指令SECTOINS和MEMORY。如果把RAM和ROM看成是两个仓库的话,那MEMORY指令就是把这两个仓库再分成不同的区域。如果把不同的代码段是看成一件件货物的话,那么SECTOINS指令则指出了这些货物对应的存放位置。.cmd文件由汇编器产生的COFF格式的OBJ文件中的段作为构造块,当有多个文件进行链接时,链接器会将输入段结全在一起产生可执行的COFF输出模块,然后链接器为各输出段选择存储器地址。11 MEMORY指令说明存储器(MEMORY)伪指令,用来定义目标系统的存

2、储器空间。MEMORY可以定义存储器的区域,并指定起始地址和长度。MEMORY伪指令的一般语法:MEMORY PAGE 0: name1(attr):origin=constant, length=constant; PAGE n: name1(attr):origin=constant, length=constant;PAGEn中的页号n最大为255。每个PAGE代表一个完全独立的地址空间。通常PAGE0为程序存储器,PAGE1为数据存储器。Name1:存储器区间名。可包含8个字符。不同PAGE可以取同样的name1,但在同一个PAGE内区间名不可以相同。Attr:可选项。规定存储器属性。

3、R,可以对存储器执行读操作W,可以对存储器执行写操作X,破除可以装入可执行的程序代码I,规定可以对存储器进行初始化Origin:起始地址。Length:区间长度。初始化段用SECTIONS可定位两次:装入和运行。如:一些关键的执行代码必须装在系统的ROM中,但希望在较快的RAM中运行。未初始化段只可被定位一次。自己写的关于LF2406A的.cmd文件MEMORYPAGE 0: VECS:origin=0h,length=40h;中断向量表,40h43h为安全代码;或保留代码区,复位向量是0h和1h FLASH:origin=44h,length=0ffbch;32Kflash SARAM:or

4、igin=8000h,length=800h;当PON=1&&DON=0,;SARAM映射为程序存储空间 B0: origin=ff00h,length=100h; 256 WORD DARAM,CNF=1时PAGE 1: MMRS:origin=0h,length=60h;内部映射寄存器,或保留区间 B2:origin=60h,length=20h;32 WORD DARAM B0:origin=200h,length=100h;256 WORD DARAM,CNF=0时 B1:origin=300h,length=100h;256 WORD DARAM SARAM:orig

5、in=800h,length=800h;2K WORD SARAM,DON=1&&PON=0 PF1: origin=7000,length=230h;外设帧 EVA:origin=7400,length=32h;外设帧2 EVB:origin=7500,length=32h;外设帧3内部的所有的存储器都定义过了,最后的三个PF1、EVA、EVB可以不用定义的,因为是这外设的寄存器映射。12 SECTOINS指令说明段(SECTOINS)伪指令,告诉链接器如何将输入段结合成输出段并告诉链接器将输出段放在存储器的何处。SECTIONSName:property,property,

6、Name:property,property,Name:property,property,Name:源程序中的段名。如.textProperty:段的属性参数。一个段的属性参数包括下列五种:21Load allocation,由它定义将输出段加载到存储器中的什么位置。语法:load: allocation、allocation、>allocation(allocation是将逻辑段定位的地址说明)例如:.text:load=0x1000;将输出段定位到一个特定的地址 .text:load>ROM;将输出段定位到命名为ROM的存储区 .text:align=0x80;关键词alig

7、n规定输出段.text定位到从地址边界0x80开始 .text:block(128);关键词bolck规定段必须在两个地址边界之内,如果段太;大,就从一个地址边界开始 .text:PAGE0;将输出段定位到PAGE0如果输出段只定位一个位置,则可省去关键字load。如:.text: >ROM如果要用到一个以上参数,可以将它们排成一行。如:.text: >ROM align 16 PAGE 2或.text: load(ROM align(16) PAGE(2)(地址边界是2的N次方幂的地址,如地址边界定为16,则其地址为xxx0h。)定边界地址用在什么情况下?12Run alloca

8、tion,由它定义输出段在存储器的什么位置开始运行。语法:run=allocation或run>allocation链接器为每个输出段在目标存储器中分配两个地址:加载地址和执行地址。通常这两个地址是相同的。但如要先将程序加载到ROM,然后在RAM中以较快的速度运行。则可两次定位,如:.fir:load=ROM,run=RAM12Input sections,由它定义哪些输入段组成输出段。语法:input_sections.text: *(.text) 等价于 .text: 这样就把所有的.text段链接成.text段输出。也可以明确的用文件名和段名来确定输入段:.text: F1.obj

9、 (.text,sect);链接F1.obj的.text、.sect段F2.obj (sect) ;这里的sect前面的点是本来就不用写还是书上的错误?F3.obj;链接f3.obj的所有段12Section type,用它为输出段定义特殊形式的标志语法:Type=COPY、Type= DSECT、Type=NOLOAD12Fill value,当初始化段中存在未初始化的存储区间时,对其填充一指定值。语法:fill: value 或name:=value13问题131如果不同页中定义了相同的名字,又不指定PROG,这时默认在哪个空间呢?如:PAGE 0: B0: origin=0ff00h,l

10、ength=100h; 256 WORD DARAM,CNF=1时PAGE 1: B0: origin=200h,length=100h;256 WORD DARAM,CNF=0时这明.const:>B1是指向那个空间? 132 -o file.out-m file.map以上两个语句用来生成.out和.map文件。如果没写这,也没有关系,CCS->project->Build options菜单下的Linker选项页里面还可以设置。2·代码中关于对段的定义对段定义目的:上面已经说明了CMD文件的作用是仓库分区和指定货物的存放位置,而对代码中段的定义则是给代码,数据

11、,变量这些货物起名字,使它对应CMD文件里的段名存放。21 段的分类211目标文件至少包含三个默认段:.text文本段通常包含可执行代码.data数据段通常包含初始化的数据.bss保留空间段通常为没有初始化的变量保留空间212自定义段:.usect保留空间段为没有初始化的数据保留空间的自定义段.sect初始化段自定义段和默认段的使用相同,但它们被单独汇编。例如,重复使用.text段在目标文件中创建单个.text段,在链接时,这个.text段作为单个单元分配到存储器中。假中有一部分可执行代码(如初始化程序)不希望和.text段分配在一起,可以将它们汇编进一个自定义段,这样就可以分配在与.text

12、段不同的地方。不能用不同的伪指令定义相同的段。如.usect和.sect用同一个段名。213初始化段.text.data.sect “section name(段名)”当汇编器第一次遇到一个.data时,.data段为空的。跟在第一个.data伪指令后的指令被汇编进.data段,直到遇到.text、.sect、.asect。如果后面还遇到.data,则将跟在这些.data后面的语句汇编时已经存在的.data段。这样就形成了单个可被连续分配到存储器中的.data段。214未初始化段.bsssymbol(符号),size in words(字数)blocking flagsymbol.usect“

13、section name(段名)”size in words,blocking flagsymbol:指向.bss或.usect伪指令所保留的存储空间的第一个字。这个符号与保留空间所使用的变量名相对应。这个符号可以让其化段引用,并且也可以用一个全局符号(.global)来声明。相当于C中定义 unsigned char symbolsize in words;Size in words:保留空间大小。Blocking flag:可选项。如果该参数指定一个大于的值,则汇编器会将size in words指定的字数连续存放,分配的空间不跨页面的边界,除非字数超过一页的长度,此时将从一个页面边界开始

14、。Section name:为保留空间的自定义段的段名。08个字符。最多可产生32767个不同的自定义段。和symbol有什么不同?段名是用来汇编器联接用的,程序里用不到;而符号是地址,程序里可以引用。自定义的段名第一个字符也可以是 .,如:sect “.cinit”。初始化段定义伪指令告诉汇编器停止汇编进入当前的段,而开始汇编进入指定的段,但未初始化段定义伪指令不终止当前的段而开始一个新段,它们只是简间的临时离开当前的段。所以.bss和.usect可以出现在初始化段的任何地方而不会影响它的内容。215 作用链接器将段重新定位到目标系统的存储器映射。大多数系统包含几种存储器,使用段可以使目标存

15、储器的使用更为有效。所有段都可独立地重新定位,可将任意段放到目标存储器任何已经分配的块。22 问题221.dataCoeff.word 011h,022h,033h.bssvar1,1.bssbuffer,10Ptr.word0123.textAdd:LAC 0FHAloop:SBLK 1BLEZ aloopSACLvar1,0.dataIvals.word0aah,0bbhVar2.usect“newvars”,1Inbuf.usect“newvars”,7.textADD#0FFH.text7(WORDS).data5.bss11.newvars8(由.usect创建的段)在两本书中看到这

16、个例子,其中.data段都是5个字的目标码。Ptr.word0123不算是.data段吗?那是什么段?为什么没有计算进去,是书上写错了?查看.map文件,可以看出.data段是6个字的目标码,应该是书本错了。222编译连接都通过,为什么生成的.out文件无法下载,提示0x0地址数据错误。查看Disassembly,8000h前面的数据全为FF,8000h87ffh即SARAM区里有程序PRG_inti,8800H后的数据全和87FFH里的数据相同。8000h87ffh里的程序是否是用来清除、擦除、烧写FLASH用的?其只要打开CSS就存在。答:SECTOINS段里的load指出的是LOADPR

17、OGRAM与FLASH烧写时的共同地址。所以如果LOADPROGRAM时把load地址定到FLASH空间就会出现上面的错误。而FLASH烧写当然就不会了。所以LOAD PROGRAM与FLASH烧写要写不同的CMD文件。SECTOINS段里的run指出的是软件调试运行时的地址,如:MEMORYPAGE 0: VECS:origin=0h,length=40h/*中断向量表*/ FLASH:origin=100h,length=7000h/*;32Kflash*/ SARAM:origin=8000h,length=800h/*;当PON=1&&DON=0,*/*;SARAM映射

18、为程序存储空间*/PAGE 1: MMRS:origin=0h,length=60h/*;内部映射寄存器,或保留区间*/ B2:origin=60h,length=20h/*;32 WORDS DARAM*/ B0:origin=200h,length=100h/*;256 WORDS DARAM,CNF=0时*/ B1:origin=300h,length=100h/*;256 WORDS DARAM*/SECTIONSvectors: load=VECS,run=SARAM PAGE 0.asminti: load=FLASH,run=SARAM PAGE 0/*/.text: load=FLASH,run=SARAM PAGE 0.data: >SARAM PAGE 0.bss : >B2 PAGE 1烧写完FLASH后,复位,地址定位到0000H。单步执行,跳转到

温馨提示

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

评论

0/150

提交评论