CMD文件详解
1·什么是cmd文件,它有什么作用。
1·什么是CMD文件,它有什么作用。
CMD文件是用来说明对应的对应的代码、数据、变量的存放空间。
它包括两个指令SECTOINS和MEMORY。
如果把RAM和ROM看成是两个仓库的话,那MEMORY指令就是把这两个仓库再分成不同的区域。
如果把不同的代码段是看成一件件货物的话,那么SECTOINS指令则指出了这些货物对应的存放位置。
.cmd文件由汇编器产生的COFF格式的OBJ文件中的段作为构造块,当有多个文件进行链接时,链接器会将输入段结全在一起产生可执行的COFF输出模块,然后链接器为各输出段选择存储器地址。
1.1 MEMORY指令说明存储器(MEMORY)伪指令,用来定义目标系统的存储器空间。
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:可选项。
规定存储器属性。
R,可以对存储器执行读操作W,可以对存储器执行写操作X,破除可以装入可执行的程序代码I,规定可以对存储器进行初始化Origin:起始地址。
Length:区间长度。
初始化段用SECTIONS可定位两次:装入和运行。
如:一些关键的执行代码必须装在系统的ROM中,但希望在较快的RAM中运行。
未初始化段只可被定位一次。
自己写的关于LF2406A的.cmd文件MEMORY{PAGE 0: VECS: origin=0h, length=40h ;中断向量表,40h~43h为安全代码;或保留代码区,复位向量是0h和1h FLASH: origin=44h, length=0ffbch ;32KflashSARAM: origin=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 DARAMB0: origin=200h, length=100h ;256 WORD DARAM,CNF=0时B1: origin=300h, length=100h ;256 WORD DARAMSARAM: origin=800h, length=800h ;2K WORD SARAM,DON=1&&PON=0PF1:origin=7000, length=230h ;外设帧1EV A: origin=7400, length=32h ;外设帧2EVB: origin=7500, length=32h ;外设帧3}内部的所有的存储器都定义过了,最后的三个PF1、EV A、EVB可以不用定义的,因为是这外设的寄存器映射。
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(生成的可执行代码)。
CMD命令文件详解
CMD 命令文件解析CMD 文件的专业名称叫做链接器配置文件,用以存放链接器的配置信息,简称命令文件。
其中比较关键的就是MEMORY、SECTIONS两个伪指令的使用。
MEMORY和SECTIONS 的相关语句必须使用大写字符。
MEMORY是用以配置目标存储器的,而SECTIONS是用以指定段的存放位置的。
1 存储空间的配置DSP存储器分为三个独立选择的空间:程序空间、数据空间和I/O空间,其中程序存储器存放待执行的指令和执行中所用的系数(常数),可使用片内或片外的RAM、ROM、EPROM 等构成;数据存储器存放指令执行中产生的数据,可使用片内或片外的RAM和ROM来构成。
I/O存储器存放与映像外围接口相关的数据,也可以作为附加的数据存储空间来使用。
下表是TMS320F28335的存储空间分布:TMS320F28335的存储空间分布:2 BootRomBootRom 是位于存储器地址0x3F E000 ~ 0x3F FFFF处的8K * 16位存储区域。
并利用M0区域的0x0002 ~ 0x004E作为其Boot程序的堆栈和ebss区。
其内存映射如下:3 Cmd 文件的分配方法TI公司新的汇编器和链接器创建的目标文件采用一种COFF(通用目标文件格式),该目标文件格式更利于模块化编程,为管理代码段和目标系统存储器提供了强有力和灵活的编程方法。
用户可以通过编写链接命令文件(cmd文件)将链接信息放在一个文件中,以便在多次使用同样的链接信息时调用。
在命令文件中使用两个十分有用的伪指令MEMORY 和SECTIONS,来指定实际应用中的存储器结构和进行地址的映射。
M EMORY用来指定目标存储器结构,MEMORY下可以通过PAGE选项配置地址空间。
链接器把每一页都当作一个独立的存储空间,通常情况下,PAGE0 代表程序存储器用来存放程序,PAGE1 代表数据存储器,用来存放数据。
由编译器生成的可重定位的代码和数据块叫做“SECTIONS”(段),SECTIONS 用来控制段的构成与地址分配。
CMD文件管理
对文件的管理通常只是新建文件,删除文件,查找文件,通过目录将相应的文件归档管理。
通常用到最多的还有就是复制粘贴,也有可能的时候只可能想得某个字符串,而不记得是哪个文件,所以在应该的时候也可能会考虑到这种查找方法说明:这里应用的cmd6.11、新建文件一般不是shell的工作,这都是由相应的编辑器去完成的可以新建目录创建目录。
MKDIR[drive:]pathMD[drive:]path如果命令扩展被启用,MKDIR会如下改变:如果需要,MKDIR会在路径中创建中级目录。
例如:假设\a不存在,那么:mkdir\a\b\c\d与:mkdir\achdir\amkdir bchdir bmkdir cchdir cmkdir d相同。
如果扩展被停用,则需要键入mkdir\a\b\c\d。
2、删除文件,这里有两条命令可以使用,请看下面的说明可以删除一个或数个文件。
DEL[/P][/F][/S][/Q][/A[[:]attributes]]namesERASE[/P][/F][/S][/Q][/A[[:]attributes]]namesnames指定一个或多个文件或者目录列表。
通配符可用来删除多个文件。
如果指定了一个目录,该目录中的所有文件都会被删除。
/P删除每一个文件之前提示确认。
/F强制删除只读文件。
/S删除所有子目录中的指定的文件。
/Q安静模式。
删除全局通配符时,不要求确认/A根据属性选择要删除的文件属性R只读文件S系统文件H隐藏文件A存档文件I无内容索引文件L重分析点-表示“否”的前缀如果命令扩展被启用,DEL和ERASE更改如下:/S开关的显示句法会颠倒,即只显示已经删除的文件,而不显示找不到的文件。
删除目录:删除一个目录。
RMDIR[/S][/Q][drive:]pathRD[/S][/Q][drive:]path/S除目录本身外,还将删除指定目录下的所有子目录和文件。
用于删除目录树。
/Q安静模式,带/S删除目录树时不要求确认3、复制文件,当然复制文件是原来的文件还是存在的,不能对目录一起复制1、将一份或多份文件复制到另一个位置。
cmd 文件命名规则
cmd 文件命名规则(原创实用版)目录1.CMD 文件的概念与特点2.CMD 文件的命名规则3.CMD 文件的扩展名4.CMD 文件的应用领域5.总结正文1.CMD 文件的概念与特点CMD 文件是 Windows 操作系统中的一种批处理文件格式,它是一种文本文件,包含了一系列的命令和操作。
CMD 文件可以执行多个命令,使得用户可以方便地在一个文件中完成一系列的任务。
这种文件格式的优势在于,它能够让用户以非交互式的方式执行一系列操作,从而提高工作效率。
2.CMD 文件的命名规则CMD 文件的命名规则相对简单。
一般来说,它的文件扩展名为.cmd。
在文件名中,用户可以自由地使用字母、数字和下划线等字符,但是需要避免使用特殊字符或中文字符。
此外,文件名不能包含空格,因为这会导致命令解释器无法正确识别文件。
3.CMD 文件的扩展名CMD 文件的扩展名是.cmd。
这个扩展名告诉操作系统,该文件是一个批处理文件,包含了一系列的命令和操作。
当用户双击或通过命令提示符执行该文件时,操作系统会自动调用命令解释器来解析并执行文件中的命令。
4.CMD 文件的应用领域CMD 文件广泛应用于 Windows 操作系统的各个领域。
例如,在网络管理、系统维护、软件开发等场景中,都可能会涉及到 CMD 文件的使用。
特别是在批量处理任务和自动化操作方面,CMD 文件的优势尤为明显。
用户只需编写一个 CMD 文件,就可以轻松地完成一系列复杂的任务。
5.总结CMD 文件是 Windows 操作系统中的一种批处理文件格式,具有易于使用、高效便捷等特点。
了解 CMD 文件的命名规则和扩展名,可以帮助用户更好地管理和使用这种文件格式。
CMD文件
第二章CMD文件2.1、CMD文件综述CMD文件的主要作用是沟通物理存储器和逻辑地址的桥梁。
CMD文件反映了实际电路中存储单元的大小,并且通过阅读CMD文件可以得到系统中存储器的分配情况,特别是配合以MAP文件就可非常方便地得到系统资源的使用情况,有利于优化系统配置。
另外,由于C28X推荐使用C语言编程,就存在程序转化分段的问题,也在CMD中得到落实。
本实验系统采用的是瑞泰的CMD程序,并且是针对一个实验系统的通用CMD文件。
2.2、例解CMD文件1、寄存器区// 片上外设寄存器结构体与存储器分配的对应关系MEMORY //反映存储器空间范围、描述系统实际的硬件资源{PAGE 0: //第0页:程序空间存储器PAGE 1: //第1页:地址空间存储器//芯片仿真设定用寄存器(始于0x0000880 长:0x000180)DEV_EMU : origin = 0x000880, length = 0x000180//中断向量表PIE_VECT : origin = 0x000D00, length = 0x000100//闪存寄存器组FLASH_REGS : origin = 0x000A80, length = 0x000060//保密位寄存器组CSM : origin = 0x000AE0, length = 0x000010// 外部扩展寄存器组XINTF : origin = 0x000B20, length = 0x000020//定时器0 寄存器组CPU_TIMER0 : origin = 0x000C00, length = 0x000008//PIE控制寄存器组PIE_CTRL : origin = 0x000CE0, length = 0x000020 ///增强型CAN模块寄存器组ECANA : origin = 0x006000, length = 0x000040ECANA_LAM : origin = 0x006040, length = 0x000040ECANA_MOTS : origin = 0x006080, length = 0x000040 ECANA_MOTO : origin = 0x0060C0, length = 0x000040ECANA_MBOX : origin = 0x006100, length = 0x000100//系统控制寄存器组SYSTEM : origin = 0x007010, length = 0x000020//外设接口寄存器组SPIA : origin = 0x007040, length = 0x000010//异步串行通信接口寄存器组SCIA : origin = 0x007050, length = 0x000010//外部中断设定寄存器组XINTRUPT : origin = 0x007070, length = 0x000010//多功复用引脚选择寄存器组GPIOMUX : origin = 0x0070C0, length = 0x000020//多功能引脚数据寄存器组GPIODAT : origin = 0x0070E0, length = 0x000020//模拟数字转换寄存器组ADC : origin = 0x007100, length = 0x000020// 事件管理寄存器组EV A : origin = 0x007400, length = 0x000040EVB : origin = 0x007500, length = 0x000040//异步串行通信接口B寄存器组SCIB : origin = 0x007750, length = 0x000010//多通道缓冲接口寄存器组MCBSPA : origin = 0x007800, length = 0x000040//密码保护寄存器组CSM_PWL : origin = 0x3F7FF8, length = 0x000008}SECTIONS //建立与程序一一对应的关系、描述段是如何定位{PieVectTableFile : > PIE_VECT, PAGE = 1/*** Peripheral Frame 0 Register Structures ***///在头文件中可以找到DevEmuRegsFile的定义DevEmuRegsFile : > DEV_EMU, PAGE = 1FlashRegsFile : > FLASH_REGS, PAGE = 1CsmRegsFile : > CSM, PAGE = 1XintfRegsFile : > XINTF, PAGE = 1CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1PieCtrlRegsFile : > PIE_CTRL, PAGE = 1/*** Peripheral Frame 1 Register Structures ***/SysCtrlRegsFile : > SYSTEM, PAGE = 1SpiaRegsFile : > SPIA, PAGE = 1SciaRegsFile : > SCIA, PAGE = 1XIntruptRegsFile : > XINTRUPT, PAGE = 1GpioMuxRegsFile : > GPIOMUX, PAGE = 1GpioDataRegsFile : > GPIODAT PAGE = 1AdcRegsFile : > ADC, PAGE = 1EvaRegsFile : > EV A, PAGE = 1EvbRegsFile : > EVB, PAGE = 1ScibRegsFile : > SCIB, PAGE = 1McbspaRegsFile : > MCBSPA, PAGE = 1/*** Peripheral Frame 2 Register Structures ***/ECanaRegsFile : > ECANA, PAGE = 1ECanaLAMRegsFile : > ECANA_LAM PAGE = 1ECanaMboxesFile : > ECANA_MBOX PAGE = 1ECanaMOTSRegsFile : > ECANA_MOTS PAGE = 1ECanaMOTORegsFile : > ECANA_MOTO PAGE = 1/*** Code Security Module Register Structures ***/CsmPwlFile : > CSM_PWL, PAGE = 1}2、程序区/*// FILE: F2812_EzDSP_RAM_lnk.cmd//定位C程序在存储器中的位置-l rts2800.lib //链接库文件rts2800.lib-w //-stack 400h //栈大小为400h-heap 100 //堆大小为100MEMORY{PAGE 0 :///RAMM0 : origin = 0x000000, length = 0x000400//RAMM0 : origin = 0x3f6000, length = 0x001000BEGIN : origin = 0x3F8000, length = 0x000002/*BEGIN : origin = 0x3F7FF6, length = 0x000002*///PRAMH0 : origin = 0x3f8002, length = 0x001000PRAMH0 : origin = 0x81000, length = 0x002000RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */PAGE 1 :/* For this example, H0 is split between PAGE 0 and PAGE 1 */RAMM1 : origin = 0x000400, length = 0x000400DRAMH0 : origin = 0x3f8002, length = 0x001ffcDRAMH1 : origin = 0x83000, length = 0x004ffc}SECTIONS{codestart : > BEGIN, PAGE = 0//ramfuncs : > PRAMH0 PAGE = 0.text : > PRAMH0, PAGE = 0//文本段.cinit : > PRAMH0, PAGE = 0//.pinit : > PRAMH0, PAGE = 0.switch : > PRAMH0, PAGE = 0.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */ .stack : > RAMM1, PAGE = 1.ebss : > DRAMH1, PAGE = 1.econst : > DRAMH0, PAGE = 1.esysmem : > DRAMH0, PAGE = 1.const : > DRAMH0, PAGE = 1.sysmem : > DRAMH0, PAGE = 1.cio : > DRAMH0, PAGE = 1}1..cinit 存放C程序中的变量初值和常量2..const 存放C程序中的字符常量、浮点常量和用const声明的常量3..text 存放C程序的代码4..bss 为C程序中的全局和静态变量保留存储空间5..far 为C程序中用far声明的全局和静态变量保留空间6..stack 为C程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果7..sysmem用于C程序中malloc、calloc和realloc函数动态分配存配空间2.3文件类型.pjt CCS使用的工程文件.c C程序源文件.asm 汇编程序源文件.h 头文件.lib 库文件.cmd 连接命令文件.obj 目标文件.out 可执行文件.wks 工作区文件.dat 数据文件.map 映射文件2.4、常用命令。
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文件中分配空间。
[原]TMS320F28335项目开发记录6_28335之cmd文件详解
[原]TMS320F28335项目开发记录6_28335之cmd文件详解2014-11-3阅读970 评论01.CMD文件的作用CMD文件的作用就像仓库的货物摆放记录一样,为程序代码和数据分配指定的空间。
2.C语言生成的段C语言生成的段大致分为两大类:初始化和未初始化,已初始化的段含有真正的指令和数据,未初始化段只是保留变量的地址空间。
已初始化段通常放在程序空间,未初始化段通常放在数据空间。
已初始化段:.text——C语言编译生成的汇编指令代码存放于此.cinit——存放初始化的全局和静态变量.const——字符串常量和const定义的全局和静态变量.econst——字符串常量和far const定义的全局和静态变量.print——全局构造器(C++)程序列表.switch——存放switch语句产生的常数表格以.const段为例:const int a = 10; //注意必须是全局的如果声明为局部const初始化变量,不会放在.const段,局部变量都是运行时放在.bss段中char * p = "ABC";数组和结构体的初始值——是局部变量时,产生的是.const,如果是全局变量,产生的是.cinit未初始化段:.bss——为全局变量和局部变量保留的空间,程序上电时,.cinit空间中的数据复制出来并存放在.bss空间中.ebss——为使用大寄存器模式时预留的全局和局部变量空间,程序上电时,.cinit空间中的数据复制出来并存放在.bss空间中.stack——堆栈空间,主要用于函数传递变量或为局部变量分配空间.system——为动态存储分配保留的空间(malloc),如果有宏函数,此空间被占用.esystem——为动态存储分配保留的空间(far malloc),如果有far函数,此空间会被占用3.自定义段上面的都是官方预先定义好的,我们可以定义自己的段么?可以,使用如下语句:#pragma CODE_SECTION(symbol, "section name");#pragma DATA_SECTION(symbol, "section name");symbol——符号,可以是函数名/变量名section name——自定义的段名CODE_SECTION用来定义代码段DATA_SECTION用来定义数据段注意:不能再函数体内声明#pragma;必须在符号被定义和使用之前声明#pragma例子:#pragma DATA_SECTION(data, "data_name");char data[100];4.CMD文件在DSP28335工程文件里(不用BIOS产生CMD文件),手写CMD文件一般有两个,RAM里调试时用的两个CMD文件分别为DSP2833x_Headers_nonBIOS.cmd 和28335_RAM_lnk.cmd,烧写到flash里时用的两个CMD文件分别为DSP2833x_Headers_nonBIOS.cmd和F28335.cmd,其中DSP2833x_Headers_nonBIOS.cmd文件可以在所有工程文件中通用,主要作用是把外设寄存器产生的数据段映射到对应的存储空间,可以跟DSP2833x_GlobalVariableDefs.c文件对照一下看看。
CMD文件与MAP文件
CMD文件与MAP文件一 CMD文件CMD的专业名称叫链接器配置文件,是存放链接器的配置信息,我们简称为命令文件,CMD文件是用来标示实际存在目标系统中且可被使用的存储器范围,告诉链接程序怎么计算地址和分配空间。
它包括三个部分:(1)输入、输出定义:.obj文件——链接器要链接的目标文件;.lib文件——链接器要链接的库文件;.map文件——链接器生成的交叉索引文件;.out文件——链接器生成的可执行代码。
这部分可通过CCS中的Build Option菜单进行设置(2)MEMORY命令描述系统实际的硬件资源(3)SECTIONS命令:描述“段”如何定位。
MEMORY用来建立目标存储器的模型, MEMORY指令可以定义目标系统的各种类型的存储器,及容量。
MEMORY的语法如下:MEMORY{PAGE 0:name 0 [attr] : origin = constant, length = constantPAGE n:name n [attr] : origin = constant, length = constant}PAGE n:标示存储空间,n<255;PAGE 0为程序存储空间;PAGE 1为数据存储空间。
Name:存储空间名称。
Attr存储空间属性:只读R,只写W,可包含可执行代码X,可以被初始化I。
orgin:用来定义存储空间的起始地址;Lenth:用来定义存储空间的长度。
SECTIONS指令就可以根据这个模型来安排各个段的位置。
SECTIONS指令的语法如下:SECTIONS{.vectors: {}>VECS PAGE0;}注:“.”加不加都可以;{}表示段的全部,也可以将{}省略。
SECTIONS必须用大写字母,其后的大括号里是输出段的说明性语句,每一个输出段的说明都是从段名开始,段名之后是如何对输入段进行组织和给段分配存储器的参数说明。
二MAP文件MAP文件是CCS软件编译后产生的有关DSP用到所有程序、数据及IO空间的一种映射文件。
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它为全局变量和静态变量保留空间。
CMD命令详解
SHIFT更改批处理文件中可替换参数的位置。
SHIFT [/n]如果命令扩展名被启用,SHIFT 命令支持/n 命令选项;该命令选项告诉命令从第n 个参数开始移位;n 介于零和八之间。
例如:SHIFT /2会将%3 移位到%2,将%4 移位到%3,等等;并且不影响%0 和%1。
SORTSORT [/R] [/+n] [/M kilobytes] [/L locale] [/RE recordbytes][[drive1:][path1]filename1] [/T [drive2:][path2]][/O [drive3:][path3]filename3]/+n 指定开始每个比较的字符号码n。
/+3 说明每个比较应从每行的第三个字符开始。
少于n 个字符的行排在其它行之前。
按默认值,从每行的第一个字符开始比较。
/L[OCALE] locale 用指定的区域设置替代系统默认区域设置。
""C"" 区域设置产生最快的排序顺序并且是当前的唯一其它选择。
排序总是不分大小写的。
/M[EMORY] kilobytes 指定用于排序的主内存量,单位为KB。
最小内存量总是160 KB。
如果指定内存大小,无论主内存的可用量是多少,指定的内存量会全部用于排序。
要取得最佳性能,通常不指定内存大? 0茨现担绻锏侥献畲竽诖嬷担判蚧嵋淮瓮瓿?(非临时文件);否则,排序会分两次完成(没有完全排序的数据存储在临时文件中);用于排序和合并的内存量相等。
如果输入和输出都是文件,默认最大内存量为可用主内存的90%;否则,为主内存的45%。
/REC[ORD_MAXIMUM] characters 指定记录中的最大字符数量(默认值为4096,最大值为65535)。
/R[EVERSE] 颠倒排序顺序,即,从Z 到A,再从9 到0。
[drive1:][path1]filename1 指定要排序的文件。
如果没有指定,则排序标准输入。
DSP的CMD文件详解
DSP的CMD文件详解路帅,郭勇(中国航空工业集团公司西安航空计算技术研究所,陕西西安710065)摘要:随着微电子技术的不断发展,DSP芯片的性能价格比不断提高,可以预见DSP芯片将渗透到各个领域,得到更加广泛的应用。
在DSP应用开发中,开发人员容易对CMD文件理解不到位,CMD文件包含系统的存储器资源声明和资源分配情况声明两部分,文章对其写法和需要注意的地方进行了详细说明。
关键词:链接配置文件;存储器资源;用户声明资源中图分类号:TP311文献标识码:A文章编号:1673-1131(2019)01-0105-020引言数字信号处理器(Digital Signal Processor,DSP)以高速数字信号处理为目标进行芯片设计,采用改进的哈佛结构,内部具有硬件乘法器,应用流水线技术,具有良好的并行性和专门用于数字信号处理的指令等特点[1]。
DSP芯片以其强大的运算能力在通信、电子、图像处理等各个领域得到了广泛的应用[2]。
随着DSP系统的越来越复杂,在开发中我们往往要对CMD文件进行一些相应的改变,错误的配置会使最终应用开发出现意想不到的问题,本文就对CMD文件内容进行了介绍,并介绍了相应语法和一些需要注意的地方,值得开发人员借鉴。
1CMD文件整体介绍CMD文件是链接器配置文件(Linker Command File),后缀名是.cmd。
CMD主要作用是存放链接器的配置信息。
编写CMD文件就是开发物理存储器的管理、分配和使用情况。
CMD文件主要包含两方面的内容:(1)系统的存储器资源声明。
依次声明DSP芯片自带存储器、外扩的存储器空间。
(2)存储器资源分配情况声明。
以下以2812为例详细详解CMD文件,目的使大家可以读懂CMD,修改CMD并按照自己的想法进行设计。
2用户声明系统的存储器资源TI的DSP系列的CMD文件使用“MEMORY”关键词标识系统的存储器资源清单,紧随其后的大括号包含了具体的声明内容。
Windows批处理文件(.bat文件和.cmd文件)介绍以及简单使用
Windows批处理⽂件(.bat⽂件和.cmd⽂件)介绍以及简单使⽤⾸先说⼀下cmd⽂件和bat⽂件的区别,从⽂件描述中的区别是,cmd⽂件叫做:Windows命令脚本,bat⽂件叫:批处理⽂件,两者都可以使⽤任意⼀款⽂本编辑器进⾏创建、编辑和修改,只是在cmd中⽀持的命令要多于bat。
批处理⽂件是⼀种没有什么固定格式的⽂件,他可以处理⼀条或者多条命令,⽂件的扩展名是:.cmd或者.bat,⽂本⾥⾯的每⼀⾏就是⼀条处理指令,双击运⾏它的时候,Windows就会调⽤cmd.exe去运⾏它。
接着我们来认识第⼀条指令:echo和@@echo off通常我们将这条指令写在我们批处理⽂件的第⼀⾏,因为有了这条指令之后,当我们在运⾏.bat的时候,就不会将⽂件⾥⾯的内容打印出来了,如果没有这句话,会先去将⽂件⾥⾯的内容打印在屏幕上,通常我们是不希望使⽤者了解⾥⾯的代码结构的.第⼆条指令:set1. set a=12. set string1=abcdefg使⽤set命令,我们可以设置变量,其中“a”和“string1”就是我们设置的变量,可以直接给设置的变量赋值。
当我们希望将设置的变量显⽰在屏幕的时候,需要在变量的前后带上“%”,然后使⽤echo命令将设置的变量进⾏回显。
如下:1. echo %a%2. echo %string1%当我们需要输出空⾏的时候,使⽤:“echo.”,其中“.”必须紧跟在echo命令的后⾯,⽽且“.”也可以被,:;”/等任⼀的符号代替,这样我们就会输出⼀个空⾏,相当于敲了⼀个回车。
第三条指令:REM 和 ::这两条指令的作⽤是帮助我们进⾏指令的注释,类似于C++中的:“/**/”和“//”1. REM set a=12. ::set string1=abcdefg第四条指令:PAUSEpause在指令中的作⽤是暂停,当我们需要在⽂件运⾏的中间让其暂停⼀下,看⼀下我们的输出,就会使⽤PAUSE命令,然后在控制台就会显⽰:“请按任意键以继续”,当我们按下任意键之后,⽂件就会继续运⾏了,当我们希望在屏幕上显⽰⾃⼰的语句的时候,可以这样写:echo 其他提⽰语 & pause > nul这样在屏幕显⽰的就是我们⾃⼰设置的提⽰语了。
dsp的cmd文件详解
CMD文件的原理一、前言开发TI 公司的DSP 芯片,肯定要编写或者修改CMD 文件,这是在单片机开发中没有碰到过的新事物,也是学习DSP的难点。
面对里面种类繁多、名称各异、来历不明、作用不清、功能千差万别的存储器、区域和变量、寄存器,初学者往往都会一头雾水。
甚至很多人已经把项目成功地完成了,对CMD文件仍然是一知半解。
笔者也经历了极度困惑的过程,曾经大量地看书,下载资料,分析所能搜集到的CMD源文件。
可惜的是,无论是TI 公司的原始文档,还是网上的资料,或者BBS的帖子,都没有透彻地说明CMD 文件的原理和使用,只说―然‖ ,要靠自己去体会―所以然‖ ,去―悟‖ 。
终于有一天,我悟到了,也许只是―一些‖ 。
现在,我把自己的―一些‖写下来。
我将细致而通俗地说明CMD 文件的原理,给您―鱼‖ ,更给您―渔‖ ,一步步地引导象我当初一样的初学者。
我将以TI 的2407 为对象展开说明,对于TI 公司其他型号、其他系列的DSP,道理是完全相同的。
用时下学术界最最最流行的语式,叫做―基于2407‖——这个词起源于英文的―based on‖ ,或―something based‖ ,被我们大量地引用,以至于令人反胃了——我们美妙、绚烂的语言,现在只剩下―基于‖了。
笔者水平有限,但保证会用心去写,您会看到很多别处没有的思路和信息,相信会基本打通初学者的任督二脉。
本文适用于那些有单片机的开发基础、刚开始学习DSP 的初学者。
如果你还不知道程序空间,数据空间这些名词,可能就比较困难了。
二、CMD文件的起源在DSP系统中,存在大量的、各式各样的存储器,CMD文件所描述的,就是开发工程师对物理存储器的管理、分配和使用情况。
有必要先复习一下存储器的知识。
目前的物理存储器,种类繁多,原理、功能、参数、速度各不相同,有PROM、EPROM、EEPROM、FLASH、NAND FLASH、NOR FLASH等(ROM 类),还有SRAM、DRAM、SDRAM、DDR、DDR2、FIFO 等(RAM 类)。
CMD命令中的文件与目录操作指南
CMD命令中的文件与目录操作指南在计算机的日常使用中,文件和目录的管理是必不可少的一项任务。
而在Windows系统中,CMD命令是一个非常强大的工具,可以帮助我们快速、高效地进行文件和目录的操作。
本文将为大家介绍一些常用的CMD命令,帮助大家更好地掌握文件和目录的管理技巧。
一、文件操作1. 创建文件:使用命令"echo"可以创建一个新的文件,并将内容写入其中。
例如,输入命令"echo Hello, World! > test.txt",就可以创建一个名为test.txt的文件,并将"Hello, World!"写入其中。
2. 复制文件:使用命令"copy"可以将一个文件复制到指定的位置。
例如,输入命令"copy test.txt D:\backup",就可以将test.txt文件复制到D盘的backup目录下。
3. 移动文件:使用命令"move"可以将一个文件移动到指定的位置。
例如,输入命令"move test.txt D:\backup",就可以将test.txt文件移动到D盘的backup目录下。
4. 删除文件:使用命令"del"可以删除一个文件。
例如,输入命令"del test.txt",就可以删除名为test.txt的文件。
5. 查找文件:使用命令"dir"可以列出指定目录下的所有文件。
例如,输入命令"dir D:\backup",就可以列出D盘backup目录下的所有文件。
二、目录操作1. 创建目录:使用命令"mkdir"可以创建一个新的目录。
例如,输入命令"mkdir new_folder",就可以在当前目录下创建一个名为new_folder的目录。
CMD命令解析
CMD命令解析一、CMD所有命令名称及用途解释C:\Documents and Settings\Administrator>help有关某个命令的详细信息,请键入HELP 命令名1.ASSOC 显示或修改文件扩展名关联。
2.AT 计划在计算机上运行的命令和程序。
3.ATTRIB 显示或更改文件属性。
4.BREAK 设置或清除扩展式CTRL+C 检查。
5.CACLS 显示或修改文件的访问控制列表(ACLs)。
6.CALL 从另一个批处理程序调用这一个。
7.CD 显示当前目录的名称或将其更改。
8.CHCP 显示或设置活动代码页数。
9.CHDIR 显示当前目录的名称或将其更改。
10.CHKDSK 检查磁盘并显示状态报告。
11.CHKNTFS 显示或修改启动时间磁盘检查。
12.CLS 清除屏幕。
13.CMD 打开另一个Windows 命令解释程序窗口。
14.COLOR 设置默认控制台前景和背景颜色。
P 比较两个或两套文件的内容。
PACT 显示或更改NTFS 分区上文件的压缩。
17.CONVERT 将FAT 卷转换成NTFS。
您不能转换当前驱动器。
18.COPY 将至少一个文件复制到另一个位置。
19.DA TE 显示或设置日期。
20.DEL 删除至少一个文件。
21.DIR 显示一个目录中的文件和子目录。
22.DISKCOMP 比较两个软盘的内容。
23.DISKCOPY 将一个软盘的内容复制到另一个软盘。
24.DOSKEY 编辑命令行、调用Windows 命令并创建宏。
25.ECHO 显示消息,或将命令回显打开或关上。
26.ENDLOCAL 结束批文件中环境更改的本地化。
27.ERASE 删除至少一个文件。
28.EXIT 退出CMD.EXE 程序(命令解释程序)。
29.FC 比较两个或两套文件,并显示不同处。
30.FIND 在文件中搜索文字字符串。
31.FINDSTR 在文件中搜索字符串。
32.FOR 为一套文件中的每个文件运行一个指定的命令。
cmd解释说明
C:\Documents and Settings\Administrator>cmd /?启动Windows XP 命令解释程序一个新的实例CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF] [[/S] [/C | /K] string]/C 执行字符串指定的命令然后终断/K 执行字符串指定的命令但保留/S 在/C 或/K 后修改字符串处理(见下)/Q 关闭回应/D 从注册表中停用执行AutoRun 命令(见下)/A 使向内部管道或文件命令的输出成为ANSI/U 使向内部管道或文件命令的输出成为Unicode/T:fg 设置前景/背景颜色(详细信息,请见COLOR /?)/E:ON 启用命令扩展(见下)/E:OFF 停用命令扩展(见下)/F:ON 启用文件和目录名称完成字符(见下)/F:OFF 停用文件和目录名称完成字符(见下)/V:ON 将! 作为定界符启动延缓环境变量扩展。
如: /V:ON 会允许!var! 在执行时允许!var! 扩展变量var。
var 语法在输入时扩展变量,这与在一个FOR 循环内不同。
/V:OFF 停用延缓的环境扩展。
请注意,如果字符串有引号,可以接受用命令分隔符'&&' 隔开的多个命令。
并且,由于兼容原因,/X 与/E:ON 相同,/Y 与/E:OFF 相同,并且/R 与/C 相同。
忽略任何其他命令行开关。
如果指定了/C 或/K,命令行开关后的命令行其余部分将作为命令行处理;在这种情况下,会使用下列逻辑处理引号字符("):1. 如果符合下列所有条件,那么在命令行上的引号字符将被保留:- 不带/S 命令行开关- 整整两个引号字符- 在两个引号字符之间没有特殊字符,特殊字符为下列中的一个: <>()@^|- 在两个引号字符之间有至少一个空白字符- 在两个引号字符之间有至少一个可执行文件的名称。
初学CMD文件
一、有关段(sections)的知识汇编器和链接器产生的可被DSP装置执行的目标程序,这些目标文件格式被称为通用目标文件格式(COFF)。
COFF使得模块化编程更容易,它鼓励用户在写汇编语言程序时根据代码块和数据块的方式来思考如何编写程序,这些“模块(block)”就是“段(sections)”。
目标文件的最小单位称为段,段是占据一个连续空间的代码块或数据块,与其他段一起在存储器映射图内。
目标文件的各个段是分开的,有特色的。
一个COFF目标文件总是包含3个默认段:(1).text段,通常包含可执行代码;(2).data段,通常含有初始化数据;(3).bss段,通常为未初始化变量预留的空间。
自定义的段:(1)由汇编伪指令.sect创建的段(2)由汇编伪指令.usect创建的段其中,.text、.data、由.sect创建的段属于初始化段(含有数据和代码);.bss、由.usect创建的段属于未初始化段(为未初始化的数据在存储器映像图内预留空间)。
注:不能用不同的伪指令定义相同的段。
二、由汇编器产生的COFF格式的OBJ文件中的段作为构造块,当有多个文件进行链接时,链接器会将输入段结合在一起产生可执行的COFF输出模块,然后链接器为各输出段选择存储器地址,这就是CMD文件。
CMD文件是用来分配ROM和RAM的,告诉链接程序怎么计算地址和分配空间。
它包括三个部分:(1)输入、输出定义:.obj文件——链接器要链接的目标文件;.lib文件——链接器要链接的库文件;.map文件——链接器生成的交叉索引文件;.out文件——链接器生成的可执行代码。
这部分可通过CCS中的Build Option菜单进行设置。
(2)MEMORY命令:描述系统实际的硬件资源,即指定芯片的ROM和RAM的大小和并划分出的几个区间。
默认的,PAGE0对应ROM(程序存储区),PAGE1对应RAM(数据存储区),例定义一个VECS存储区域,具有R和W属性,填充常数ffffh:MEMORY{PAGE 0:VECS(RW):origin=0000h,length=00ffh,f=ffffh;}注:1)PAGE就是对一个存储空间进行标记,最多可以有255个PAGE,每个PAGE代表一个完全独立的地址空间,不同的PAGE上的存储器区间可以取相同的名字;2)Attr:可选项,规定存储器属性:①R,可以对存储器执行读操作;②W,可以对存储器执行写操作;③X,命名的存储器能包含可执行的代码;④I,可以对存储器进行初始化;3)origin:起始地址,可写成org或o;length:长度,可写成len或l。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
开发 TI 公司的 DSP 芯片,肯定要编写或者修改 CMD 文件,这是在单片机开发中没有碰到过的新事物,也是学习 DSP的难点。
面对里面种类繁多、名称各异、来历不明、作用不清、功能千差万别的存储器、区域和变量、寄存器,初学者往往都会一头雾水。
甚至很多人已经把项目成功地完成了,对CMD文件仍然是一知半解。
笔者也经历了极度困惑的过程,曾经大量地看书,下载资料,分析所能搜集到的CMD源文件。
可惜的是,无论是TI 公司的原始文档,还是网上的资料,或者BBS的帖子,都没有透彻地说明 CMD 文件的原理和使用,只说“然” ,要靠自己去体会“所以然” ,去“悟” 。
终于有一天,我悟到了,也许只是“一些” 。
现在,我把自己的“一些”写下来。
我将细致而通俗地说明 CMD 文件的原理,给您“鱼” ,更给您“渔” ,一步步地引导象我当初一样的初学者。
我将以 TI 的 2407 为对象展开说明,对于 TI 公司其他型号、其他系列的 DSP,道理是完全相同的。
用时下学术界最最最流行的语式,叫做“基于2407”——这个词起源于英文的“basedon” ,或“something based” ,被我们大量地引用,以至于令人反胃了——我们美妙、绚烂的语言,现在只剩下“基于”了。
笔者水平有限,但保证会用心去写,您会看到很多别处没有的思路和信息,相信会基本打通初学者的任督二脉。
本文适用于那些有单片机的开发基础、刚开始学习 DSP 的初学者。
如果你还不知道程序空间,数据空间这些名词,可能就比较困难了。
二、CMD文件的起源在DSP系统中,存在大量的、各式各样的存储器,CMD文件所描述的,就是开发工程师对物理存储器的管理、分配和使用情况。
有必要先复习一下存储器的知识。
目前的物理存储器,种类繁多,原理、功能、参数、速度各不相同,有PROM、 EPROM、 EEPROM、 FLASH、 NAND FLASH、 NOR FLASH等(ROM 类),还有SRAM、DRAM、SDRAM、DDR、DDR2、FIFO 等(RAM 类)。
无论多么复杂,从断电后保存数据的能力来看,只有两类:断电后仍然能够保存数据的叫做非易失性存储器(non-volatile,本文称为ROM 类),数据丢失的叫做易失性存储器(本文称为 RAM 类); ROM 类的芯片都是非易失性的,而 RAM 类都是易失性的。
即使同为 ROM类或同为 RAM 类存储器,仍然存在速度、读写方法、功耗、成本等诸多方面的差别。
比如 SRAM 的读写速度,从过去的15ns、12ns,提高到现在的 8ns、10ns,FLASH的读取速度从 120ns、75ns,到现在的 40ns、30ns。
有没有人这样想过:使用存储器的人,希望存在这样的区别吗?或者说,理想的存储器,应当是什么样的?我们使用存储器时,如果没有人为地改变它,就希望里面的数据永远不要变,即使断了电也要完好地保存;如果里面的内容是我不需要的或者不能用的,我自然就会给它写入有用的内容,比如初始化。
理想的存储器就应当永远保存数据,无论掉电与否,而且,希望读写速度为每秒无穷多字节,是 0ns,而不是什么 8ns,10ns。
——不是吗?然而,人类实现存储器芯片的技术,还没有达到理想情况,所以才会有这么多类别。
“非易失”和“速度”就是一对典型的矛盾。
非易失的 ROM 类存储器,可以“永远”地保存数据,但读写速度却很低,比如30ns;RAM 的速度(8ns)一般都比 ROM(30ns)快得多,但却不能掉电保存。
这是很无奈的现实。
假如有那么一天,ROM 类的读写速度和 RAM 一样快,或者RAM 也可以掉电保存数据,就不存在易失和非易失的区别了,那将是革命性的进步。
那时,智能芯片和智能系统的设计将会有很大的变化,编写 CMD 文件就会很简单,甚至不需要了。
已经有芯片厂家做了一些这方面的工作,比如把电池和 RAM 结合起来,就是一个能掉电保存的 RAM。
它既可以作为传统的ROM 使用,又可以当 RAM 使用。
但这显然只是一个暂时、折中的方法,其原理、成本、体积、容量还不如人意,不能算是“革命性”的进步。
我们平时在用到存储器的时候,要考虑哪些因素呢?首先必须确认,在你的使用场合,是要永久保存数据,还是暂时保存?这关系到选择非易失性,还是易失性存储器的大问题,是首要的问题。
在某些场合,如果必须永远地保存数据,即使希望速度快一些,也只能选择非易失的 ROM 类存储器,而把速度问题放在其次,或者另外想办法解决;另外一些场合,却要把速度放在第一位,只要在通电期间能够始终保存数据,就够了,当然就要选择 RAM 类的存储器了。
这两种情况我们都会遇到:程序代码一般都要存储在ROM 类存储器中,否则,从设备生产开始,储存、运输,一直到用户手里,要必备不间断电源,还要保证不发生断电的意外;程序运行的时候,为了提高速度,就必须在RAM 中运行,试想想,如果你的 MP4放电影一停一顿的,谁还会用它看电影呢?所以 ROM和 RAM 都是必不可少的,各有各的用途,而且,出于功能、参数、速度、读写方法、功耗、工艺、成本等方面的考虑,往往要同时使用不止一种存储器。
事实上,TI 在设计 DSP芯片时,也遇到同样的问题,TI 考虑的情况要比我们更多,更复杂。
要知道,设计芯片的人是最牛 X的,开发工程师只是跟在人家后面,在人家规定的框框里亦步亦趋。
翻开DSP的 PDF文档,找到 memorymap就会看到,芯片上集成了形形色色的存储器: FLASH、ROM、BROM、OTP ROM,SRAM、SARAM、DARAM、FIFO 等。
就 2407和 2812而言,如果是做个流水灯之类的小东东,DSP芯片加晶体加电源就可以了,片上集成的ROM 和RAM,在仿真状态下已经足够用了,烧写并脱离仿真器运行也足够。
所以,它们的最小系统不需要外扩任何存储器。
但也只能做简单的东东,往往还需要外扩一些ROM 和/或 RAM 存储器,才能委以大用。
(顺便说一句,DSP的最小系统,要比 8951芯片的最小系统大得多。
)千万不要被这些存储器的名称所迷惑!翻来覆去,其实就是两大类:非易失和易失。
初学者往往忽略了这一点。
两大类!记住这一点,CMD文件就是以这两类存储器为主轴,然后展开的。
DSP芯片的片内存储器,只要没有被TI占用,用户都可以全权支配。
TI设计了“CMD文件”这种与用户的接口形式,用户通过编写 CMD 文件,来管理、分配系统中的所有物理存储器和地址空间。
CMD文件其实就是用户的“声明” ,包括两方面的内容:1、用户声明的整个系统里的存储器资源。
无论是 DSP 芯片自带的,还是用户外扩的,凡是可以使用的、需要用到的存储器和空间,用户都要一一声明出来:有哪些存储器,它们的位置和大小。
如果有些资源根本用不到,可以视为不存在,不必列出来;列出来也无所谓。
2、用户如何分配这些存储器资源,即关于资源分配情况的声明。
用户根据自己的需要,结合芯片的要求,把各种数据分配到适当种类、适当特点、适当长度的存储器区域,这是编写 CMD文件的重点。
用户编写完自己的程序以后,要经过开发环境(编译器)的安排和解释(即编译),转换为芯片可以识别的机器码,最后下载到芯片中运行。
CMD 文件就是在编译源程序、生成机器码的过程中,发挥作用的,它作为用户的命令或要求,交给开发环境(编译器)去执行:就这么分配!下面将从这两个方面入手,详细说明如何编写 CMD文件。
三、编写CMD文件之——资源清单如上文所述,CMD 文件包含两大内容,首先就是存储器的资源清单,或者说,系统中(电路板上)可用的存储器资源。
TI 规定,CMD文件的资源清单用关键字“MEMORY”作为标识,具体内容写在后面的大括号 { } 里面。
如下面的形式:MEMORY{PAGE 0: xxx : org = 0x1234 , length = 0x5678PAGE 1: aaa : org = 0x1357 , length = 0x2468}其中,MEMORY,PAGE n,org,length,包括冒号、等于号、花括号,都是关键字符,必不可少。
PAGE n表示把可用的资源空间再划分成几个大块,最多允许分 256块,从PAGE 0到 PAGE 255。
如果把 MEMORY比作图书馆, PAGE n 就是其中的“社科类” 、“工程类” 、“外文类”等。
大家都习惯于把PAGE 0作为程序空间,把 PAGE 1作为数据空间。
如果你很好奇,也可以试试别的数字。
凡智能芯片,都离不开这两种“空间” ,大名鼎鼎的冯·诺依曼结构和哈佛结构,都是建立在程序空间和数据空间两种结构的基础上,我们面对的DSP也是如此。
只要学习过单片机,就很容易理解。
如果你构思出第三种结构,恭喜您,您将与这二位齐名了。
CMD文件中还可以写上注释,用“”包围起来,但不允许用“//” ,这一点和C语言不同。
上面的例子,仅仅就是个“例子” ,不针对任何特定的芯片。
带注释的语句有两行,每一行都是一项声明,表示在程序空间或数据空间下,再细分更小的块,好比是“社科类”又分了几个书架。
比如 xxx : org =0x1234 , length = 0x5678 表示在程序空间 PAGE 0里面,划分出一个命名为xxx的小块空间,起始地址从存储单元0x1234 开始,总长度为 0x5678 个存储单元,地址和长度通常都以十六进制数表示。
所以,xxx空间的实际地址范围从 0x1234开始,到 0x1234 + 0x5678 – 1 = 0x68AB 结束(起始地址加长度再减一),这一段连续的存储区域,就属于xxx小块了。
上面的例子中,PAGE 0和 PGAE 1各包含了只有一个“小块” ,用户可以根据自己的情况,按照同样的格式任意增加。
在支持多个CMD文件的开发环境里,某个或某几个CMD文件中,“小块”的数量可以为 0,也就是说,关键字 PAGE 0或 PAGE 1下面,可以是空白的。
但不允许所有的CMD 文件的同一空间都是空白。
另外,没有资料提到过“小块”数量上限的限制,需要去查阅文档或咨询TI 公司。
很多关键字,还允许有别的写法,比如“org”可以写为“o” ,“length”可以写为“len” 。
这些规定和其他细节,可以去查阅 TI 的 pdf 文档,一般叫做“xxxxx Assembly Language Tools User's Guide.pdf” ,汇编语言工具指南,xxxxx是芯片的型号或系列。
但这个文档不适合初学者。
实践证明,至少对于 C2000 系列的 2407 和 2812 而言,存储单元的单位是“字word” ,即16bit。
但 TI 的文档却说是“字节byte” ,应当是 TI 写错了。