tag 标签: cmd

相关博文
  • 热度 12
    2012-12-5 19:59
    1257 次阅读|
    0 个评论
    是对我这篇博文的补充 http://bbs.ednchina.com/BLOG_ARTICLE_3008613.HTM  
  • 热度 26
    2012-11-24 16:58
    4748 次阅读|
    3 个评论
           写在最前,不喜请略过。本博文的主要内容已在QQ空间、人人网、网易博客、百度空间等平台发表过,最近进行了排错和修改,作者为Mr_D_prince(斌斌-龙臻),也就是本人,前两者均为我在非技术论坛的昵称。在技术论坛我更喜欢newofcortexm3这个昵称,原因无他,我就是个技术新人。之所以文章类型为什么是整理,是因为博文的主要内容均来自TI相关的技术手册,我只是做了下解读或者整理。     参与了一款两轮自平衡机器人的研究项目。随着项目实践深入,要实现的 功能 越来越复杂,所定义的常量、变量也越来越多。某一天,当我增加了 串口 通信 的代码之后,CCSV4.12竟然提醒 编译 不通过,提醒的内容是“.econst”的容量超限,如下图1所示,而把增加的代码删除之后,程序可以正常编译且运行。   图1:编译出现的问题     既然是容量问题,那我削减变量、常量的个数总可以吧,当我费了九牛二虎之力把可删减的常变量去掉之后,这个问题依然存在,。而此问题的原因恰恰是CCS安装完C2000目录下自带的 28335_Ram_lnk.cmd 文件 (09年之后)上的那些“段”的空间映射的太细,太小。新版本的28335_Ram_lnk.cmd 文件 上“.econst”段空间长度为0x1000,只有之前的版本的四分之一。     先来简单介绍下cmd文件。CCS的每一个项目都必须有CMD文件,CMD文件主要是用来对存储区域进行划分并对输出端进行地址分配。说的笼统点,就是将处理器的片内外存储器进行空间分配。     在CMD文件中,可以通过MEMORY伪指令确定目标存储器的属性及存储区域。每个存储区域包括:名字,起始地址,长度,属性选项,指定填充选项。F28xx系列DSP的数据和程序空间是相互独立的,在默认状态下,一部分存储器作为程序区域,一部分存储器作为数据区域。一般来说,MEMORY伪指令的PAGE0配置程序空间,PAGE1配置数据空间。使用MEMORY伪指令必须指明转载代码要用到的存储区域,以便链接器进行配置。MEMORY的一般指令格式如图2所示: 图2:MEMORY指令格式           在链接时,一般通过SECTIONS伪指令把输出段分配到MEMORY伪指令定义的存储区域。每一个输出段以名称开头,定义一个输出文件中的段。段名后面是段的属性,段的属性可能有以下几种:装载位置,运行位置,输出端,段类型,填充值。链接器为每一个输出段在目标存储器中分配两个地址,一个是段的装载位置,一个是段的运行位置。通常情况下,这两个地址相同。           可以通过一个或多个定位参数来控制地址分配,每一个参数包含一个关键字、可选的符号为等号或大于号。所用到的关键字有:LOAD(装载),Binding(绑定),Named MEMORY(命名存储器),Alignment(定位),Blocking(分块),Page(页)。相比较而言,Page的使用率远远高于其他几个关键字。SECTIONS的一般指令格式如图3所示: 图3:SECTION指令格式     在图3SECTIONS的指令格式中,我们看到了一些段名,有必要对这些段名做些解释。链接器定义了两种基本类型的段:一种是包括数据表格或执行代码的已初始化的段,另一种是分配在RAM空间的未初始化的段。 .text  此段存储所有执行代码和常数 .cinit此段存放初始化变量和常数,包含未用const声明的外部(extern)或静态(static)数据表 .pinit此段存放初始化变量和常数 .const此段存放字符串常量,声明,具备常数性质的全局和静态变量,包括已经用const声明的外部或静态数据表以及字符串常量 .econst此段的属性与.const相同。不同的是,.const的分配范围被限制在低64K16位数据区内,而.econst的分配范围是4M22位数据区 .switch  此段存放switch语句的常数表格   以上的段都是已经初始化了的段。 链接器定义的未初始化的段为:.bss,.ebss,.stack,.sysmem,.esysmem。 .bss此段为全局和静态变量保留空间。它是一种默认的COFF(Common Object File Format)(如有兴趣了解,请查看TI的手册)段。 .ebss此段的属性与.bss相同。不同的是,.bss的分配范围被限制在低64K16位数据区内,而.ebss的分配范围是4M22位数据区 .stack  此段为C系统的栈存储区,用来向函数传递数值与分配局部变量空间。 .sysmem此段为堆存储区 .esysmem此段为22位堆存储区 通过以上的解释,想必对CMD文件的框架应当有所了解,但要完全读懂CMD文件可能还要假以时日,当初笔者也是这样过来的。在阅读CMD文件时要前后对应,要将MEMORY指令中的名字与SECTIONS中的装载位置一一对应,并注意Page,弄清楚是在程序空间还是数据空间。     在09年之后的CMD文件中,.econst段存放在程序区以RAML1命名的程序空间,其空间存储量为0x001000。虽然以RAML1命名的程序空间有0x001000的容量,但并不是全部用来作为.econst段的,因此当代码中,字符串常量等数据量超过.econst段的容量时,就出现了图1的报错。只要扩大容量即可解决问题。
  • 热度 22
    2012-10-28 21:42
    1787 次阅读|
    2 个评论
    CCS 中对 F2812 进行编程时,有个重要的文件,是以 .cmd 为后缀的,称为链接命令文件( Linker Command File ),简称 CMD 文件。这个 CMD 文件是跟 2812 的存储器结构有关的。 2812 的存储器分为程序存储器和数据存储器,程序存储器中的主要内容是可执行代码、初始化数据、开关量等,数据存储器中存储的是外部变量、静态变量、系统堆栈等。 CCS 编译产生若干可重定位的代码和数据块,称为 section (段),这些段会通过 CMD 文件重定位到相应地存储空间中。这些段可分为初始化段和非初始化段。 初始化段包含可执行代码和数据表,编译器产生以下各初始化段: 1 ) .text 段:包含所有可执行的代码和常量。 2 ) .cinit 段:初始化的变量和常量表,主要用于 C 程序中; 3 ) .pinit 段:初始化的变量和常量表,主要用于 C++ 程序中; 4 ) .const 段:包含字符串常以及用 const 声明的全局变量和静态变量; 5 ) .econst 段:同 .const 段,但用于 far const 声明的变量或编译器采用大存器模式时; 6 ) .switch 段:为开关语句( switch )建立的数据表。 非初始化段是在存储器中保留空间,通常是中 RAM 中,程序在运行时,可此空间创建和存储变量。编译器会产生的非初始化段如下: 1 ) .bss 段:为全局变量和静态变量保留的空间,在程序引导时,引导程序会将 ROM 中的 .cinit 段中的数据复制到 .bss 段中; 2 ) .ebss 段:为 far 声明的或大存储器模式下声明的全局变量和静态变量保留空间。在程序引导过程中,引导程序会将 ROM 中的 .cinit 段中的数据复制到 .ebss 段中; 3 ) .stack 段:为 C 系统堆栈分配的空间,用于函数调用时传递参数以及为局部变量分配空间。 4 ) .sysmem 段:为动态存储器分配保留空间,如果没有用到 malloc 函数,则该段空间大小为 0 ; 5 ) .esysmem 段:为动态存储器分配保留空间,如果没有用到 far malloc 函数,则该段空间大小为 0. 除了上述 C 编译器产生的段,在 F281x 中用户还可以通过 #pragma 预编译指令产生用户定义的段。 #pragma 的用法有两种: 1 ) #pragma CODE_SECTION(symbol, ”section name” ) 2 ) #pragma DATA_SECTIOM(symbol, “section name”) 说明: 1 ) symbol 既可以是函数名,也可以是全局变量名, section name 是用户自定义的段名; 2 ) CODE_SECTION 为用户自定义代码段, DATA_SECTION 为用户自定义的数据段; 3 )使用 #pragma 预编译指定要注意,一是不能在函数体中声明 #pragma ,二是必须在 symbol 被定义之前使用 #pragma. 举例 1 : #pragma CODE_SECTION(sum, “sectionA”) int sum(int a, int b) {     return(a + b); } void main(void) { …… } 这里编译器就把函数 sum 的代码编译到段名为 sectionA 的程序段中。 举例 2 : #pragma DATA_SECTION(sin , “sinesection”) int sin = {……}; 这里编译器把数组 sin 编译到段名为 sinesection 的数据段中。 在 CMD 文件中,上述这些段都被分配到如下的页中,其中 PAGE 0 表示程序存储空间, PAGE 1 表示数据存储空间。 段 被分配的存储空间 .text PAGE 0 .cinit PAGE 0 .pinit PAGE 0 #pragma CODE_SECTION 定义的段 PAGE 0 .switch PAGE 1 .const PAGE 1 .econst PAGE 1 .bss PAGE 1 .ebss PAGE 1 .stack PAGE 1 .sysmem PAGE 1 .esysmem PAGE 1 #pragma DATA_SECTION 定义的段 PAGE 1 在 CMD 文件中主要通过两个伪指令 MEMORY 和 SECTIONS ,来实现指示存储空间和分配段到相应存储空间两个功能的。 MEMORY 语法如下: MEMORY { PAGE 0: name 0 : origin=constant, length=constant PAGE n: name n : origin=constant, length=constant } 说明: 1 ) PAGE 用来标示存储空间的关键字, n 最大为 255 , 2812 中,如前面所述, PAGE 0 表示程序存储空间, PAGE 1 表示数据存储空间; 2 ) name 表示某一属性和地址范围的存储空间名称,名称可以是 1~8 个字符,在同一页内,名称不能相同,不同页的名称可以相同; 3 ) attr 表示该存储空间的属性,共有四种属性——只读 R 、只写 W 、该空间包含可执行代码 X 、该空间包含被初始化代码 I ,此选型通常忽略; 4 ) origin 是用来定义存储空间起始地址的关键字; 5 ) length 是用来定义存储空间起始地址的关键字。 SECTIONS 语法如下: SECTIONS { name 0: 存储空间名称 , PAGE= 页数 name n: 存储空间名称 , PAGE= 页数 } 说明: 1 ) name 表示编译器输出段的名称; 2 ) 存储空间名称,是指用 MEMORY 伪指令指示的存储空间名称; 3 ) PAGE 是对应的页。   在 C 程序中,有如下的声明: #pragma DATA_SECTION(sin , “sinetable”) int sin ={………..};   在 CMD 文件中: MEMORY { PAGE 0: SIN: origin=0x0000, length=0x0100 /* 起始地址为 0x0000 ,长度为 256*/ …… PAGE 1: …… } SECTIONS { …… sinetable :SIN, PAGE=0 …… }   这样 CCS 在编译时,就将程序中定义的正弦表 sin ,放到程序存储器地址以 0x0000 开头的长度为 256 的存储空间中。
  • 热度 35
    2012-9-3 20:59
    4762 次阅读|
    2 个评论
    一、TMS2812 flash烧写的问题,具体步骤如下: 下载烧写FLASH配套CMD文件、LIB文件以及起始代码asm文件。 CMD文件名称:DSP281x_Headers_nonBIOS.cmd CMD文件名称:Flash.cmd LIB文件名称:rts2800_ml.lib ASM文件名称:DSP281x_CodeStartBranch.asm 二、烧写成功后要做的 1.一定要拔除仿真器,给电路板重新上电。 2.注意MP/MC引脚的电压。0为方式MC来作为计算机模式启动,3.3V为方式MP作为微处理器模式启动。 3.由于GPIO引脚的F4\F12\F3\F2决定了DSP2812的启动顺序,而从FLASH必须要在F4(SCITXDA)为1,而F12\F3\F2随意的状态下启动。 烧写成功拔下仿真器,复位或者重新上电后,DSP就开始执行烧写进去的程序了。
  • 热度 29
    2012-9-3 14:25
    5241 次阅读|
    0 个评论
          配置好主程序的CMD文件,才能将FLASH成功烧录,并且将FLASH中的文件拷贝到RAM中运行。关于CMD文件的配置: 首先在F2812.CMD文件中,可以看到有关于加载FLASH到RAM的内容:   ramfuncs        : LOAD = FLASHD,                         RUN = RAML0,                         LOAD_START(_RamfuncsLoadStart),                         LOAD_END(_RamfuncsLoadEnd),                         RUN_START(_RamfuncsRunStart),                         PAGE = 0 以及在C文件中调用FLASH 到RAM的函数memcpy,将它放在系统初始化(InitSystem();)之后运行。 InitSystem(); memcpy(RamfuncsRunStart,                RamfuncsLoadStart,                RamfuncsLoadEnd - RamfuncsLoadStart); Initflash(); 关于ramfuncs,则在系统初始化中定义即可。如:sysctrl.c中 #pragma CODE_SECTION(InitFlash, "ramfuncs")。
相关资源
  • 所需E币: 1
    时间: 2021-3-12 15:19
    大小: 115.51KB
    上传者: ZHUANG
    TMS320F2812定点DSP芯片的.cmd文件配置.
  • 所需E币: 4
    时间: 2019-12-25 16:27
    大小: 296.4KB
    上传者: quw431979_163.com
    如何开始DSP编程明伟电子www.csmingwei.com电话:0731-576085113975162750如何开始DSP编程本文档介绍用户该如何建立自己、编译、运行的程序。本文档仅供参考,详细地编程过程请参考相关书籍。第一步:安装CCS2.2,可参考其他书籍,主要提醒一点,如果不使用仿真器,CCS的运行环境要设置成一个模拟仿真器。第二步:运行CCS,则进入CCS开发环境,如下图所示第三步:新建一个工程,如下图明伟电子www.csmingwei.com电话:0731-576085113975162750第四步:选择路径,输入工程项目名,并确定,则如下图所示第五步:添加源文件,添加CMD文件,添加库文件,如下图所示:明伟电子www.csmingwei.com电话:0731-576085113975162750添加CMD文件和库文件跟添加源文件的方法相似,在这里不在赘述。添加完成后整个工程如下所示:明伟电子www.csmingwei.com电话:0731-576085113975162750第六步:设置Project->BUILDINGOPTIONS主要是Linker选项:OutputModule:absoluteexecutable.AutoinitMode:run-timeAutoinitialize.StackSize:200h……
  • 所需E币: 3
    时间: 2019-12-25 10:30
    大小: 6.43KB
    上传者: wsu_w_hotmail.com
    同步串口……
  • 所需E币: 4
    时间: 2019-12-25 10:30
    大小: 3.7KB
    上传者: quw431979_163.com
    定时器……
  • 所需E币: 4
    时间: 2019-12-25 10:30
    大小: 3.12KB
    上传者: givh79_163.com
    步进电机……
  • 所需E币: 5
    时间: 2020-1-3 18:49
    大小: 121.02KB
    上传者: quw431979_163.com
    目前,包括移动设备在内的很多多媒体设备上都使用了摄像头,而且还在以很快的速度更新换代。……
  • 所需E币: 5
    时间: 2019-12-24 11:15
    大小: 23.17KB
    上传者: 238112554_qq
    DSP的存储器的地址范围,CMD主要是根据那个来编的。CMD它是用来分配rom和ram空间用的,告诉链接程序怎样计算地址和分配空间。所以不同的芯片就有不同大小的rom和ram。放用户程序的地方也不尽相同。所以要根据芯片进行修改。……
  • 所需E币: 5
    时间: 2019-12-21 23:01
    大小: 538.8KB
    上传者: 238112554_qq
    一个介绍TIDSP的CMD文件的文档……
  • 所需E币: 4
    时间: 2019-12-25 15:59
    大小: 165.36KB
    上传者: wsu_w_hotmail.com
    CMD文件配置详解【推荐】TMS320F2812的CMD文件配置详解【推荐】TMS320F2812的CMD文件配置详解DSP芯片以其极高的精度,性能及运算速度等无与伦比的优点使它得到了十分广泛的应用,TMS320F2812是TI公司生产的到目前为止用于数字控制领域的最好的DSP芯片,在对它的仿真开发过程中,编译器生成的代码和数据要由链接器分配到合适的存储空间,通常链接器的命令文件.cmd文件是由用户自己编写的,编写不当,就会使仿真开发不能进行,TI公司虽然在《TMS320C28xOptimizingC/C++CompilerUser’sGuide6》和《TMS320C28xAssemblyLanguageToolsUser’sGuide6》做了介绍,但内容却比较散乱而且要求读者对整个开发系统要有较全面的认识,这对于初学者来说是比较困难的。下面以TMS320F2812芯片为例,结合具体的仿真调试实例加以说明使大家能够既快速又准确的掌握.cmd文件的分配方法。1存储空间的配置TMS320F2812的DSP存储器分为三个独立选择的空间-程序空间、数据空间和I/O空间,其中程序存储器存放待执行的指令和执行中所用的系数(常数),可使用片内或片外的RAM、ROM或EPROM等来构成;数据存储器存放指令执行中产生的数据,可使用片内或片外的RAM和ROM来构成;I/O存储器存放与映象外围接口相关的数据,也可以作为附加的数据存储空间使用。表1是TMS320F2812的存储空间分布。1【推荐】TM……