4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
CCS中CMD文件解析_u011392772的专栏-CSDN博客
来自 : CSDN技术社区 发布时间:2021-03-24

gel文件中主要包含了PLL、DDR等的初始化工作 具体可以看一下gel源码就明白了 CMD主要是用于定义内存的划分 及数据、代码等的存放位置。

 

CMD command命令 顾名思义就是命令文件指定存储区 域的分配.2812的 CMD采用的是分页制 其中PAGE0用于存放程序空间 而PAGE1用于存放数据空间。   1. #pragma CODE_SECTION和DATA_SECTION伪指令 #pragma DATA_SECTION(funcA, dataA  ------   函数外声明 将funcA数据块定位于用户自定义的段 dataA 中   ------  需要在CMD中指定dataA段的物理地址
2. MEMORY和SECTIONS是命令文件中最常用的两伪指令。MEMORY伪指令用 来表示实际存在目标系统中的可以使用的存储器范围 在这里每个存储器都有自 己的名字 起始地址和长度。SECTIONS伪指令是用来描述输入端是如何组合到 输出端内的。 CMD文件里有两个基本的段 初始化段和非初始化段。初始化段包含代码和常数等必须在DSP上电之后有效的数。故初始化块必须保存在如片内FLASH等非遗失性存储器中 非初始化段中含有在程序运行过程中才像变量内写数据进去 所以非初始化段必须链接到易失性存储器中如RAM。   已初始化的段 .text,.cinit,.const,.econst,..pinit和.switch..  .text 所有可以执行的代码和常量  .cinit:全局变量和静态变量的C初始化记录 .const 包含字符串常量和初始化的全局变量和静态变量 由const 的初始化 和说明  .econst 包含字符串常量和初始化的全局变量和静态变量 由far const 的初 始化和说明  .pinit 全局构造器 C 程序列表  .switch 包含switch声明的列表 非初始化的段 .bss,.ebss,.stack,.sysmem,和esysmem. 更好的理解就是 这些段就是存储空间而已     .bss: 为全局变量和局部变量保留的空间 在程序上电时.cinit空间中的数据复制 出来并存储在.bss空间中。  .ebss 为使用大寄存器模式时的全局变量和静态变量预留的空间 在程序上电 时 cinit空间中的数据复制出来并存储在.ebss中  .stack:为系统堆栈保留的空间 用于和函数传递变量或为局部变量分配空间。  .sysmem:为动态存储分配保留的空间。如果有宏函数 此空间被宏函数占用 如果没有的话 此空间保留为0 .esysmem:为动态存储分配保留的空间。如果有far函数 此空间被相应的占用 如果没有的化 此空间保留为0. 对于程序在FLASH中运行时 需要注意的 DSP在150M时钟频率下 FLASH中只能提供大约120M的时钟频率 所以有时候我们希望在RAM中运行时间敏感或计算量很大的子程序 比如AD采样 。但是我们所有代码都放在FLASH中 这就必须在上电后将FLASH中的这段敏感程序复制到RAM中运行 加快速度。这是在.CMD文件就必须划分一段用来设置RAM的载入和运行地址。程序代码如下   SECTIONS {………     ramfuncs      :   LOAD FLASHD,                                RUN RAML0,                                LOAD_START(_RamfuncsLoadStart),                               LOAD_END(_RamfuncsLoadEnd),                               RUN_START(_RamfuncsRunStart),                               PAGE 0   }

cmd小技巧

如果.text文件很大将其放在一段放不下 需将其放到两个程序段中 最长的一个length 0x002000 也放不下时.可以这样处理 PAGE 0 :                        PRAMH0         : origin 0x3F8002, length 0x0014FE
                       L0RAM           : origin 0x008000, length 0x001000   SECTIONS                             .text:{*(.text)} PRAMH0|L0RAM 这样就可以将.text文件放在两个定义段中。

查看段的分配及使用情况.map的链接器 存储器 分配映射文件 链接器的map文件描述以下内容  通过map文件可以查看各段的分配情况 包括段的起始地址 使用的字节数等配合cmd文件的使用 可确定各个段的使用情况 从而保证程序的正常运行和最小的空间使用。 
VisualLinker可视化链接器TI公司出品的DSP软件开发环境CCS还提供了一种可视化生成存储器配置文件的工具 VisualLinker可视化链接器。如果程序原来包含了一个链接器命令文件(.cmd文件) 则当创建可视化链接文件的时候 原来cmd文件中的内存配置仍然会被使用。如果读者想修改内存配置 双击.rcp文件就会在CCS中打开可视化链接器的图形界面 调整每个内存模块的大小 直到认为合适 然后只需要重新连编 程序即可生成新的输出文件 重复上面的步骤 直到出现满意的结果。

CMD主要是用来分配rom和ram空间用的,它告诉链接程序怎样计算地址和分配空间.所以不同的芯片就有不同大小的rom和ram.放用户程序的地方也不尽相同.所以要根据芯片进行修改.分两部分.MEMORY和SECTIONS.

MEMORY是用来指定芯片的rom和ram的大小和划分出几个区间.

MEMORY

{

PAGE 0 ...  ROM
PAGE 1....     RAM
}

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


SECTIONS
{
.vectors .................
.reset .................
................
}

SECTIONS 在程序里添加段名.XXXX(如.vectors.)用来指定该段名以下 另一个段名以上的程序(属于PAGE0)或数据(属于PAGE1)放到“ ”符号后的空间名字所在的地方。下面给出一个简单的例子

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

}

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

}

CMD文件由三部分组成 (1) 输入输出定义 (2) MEMORY命令 (3) SECTION命令。

输入/输出定义 这一部分 可以通过ccs的“Build Option........”菜单设置
         。obj 链接的目标文件
         。lib 链接的库文件
         。map 生成的交叉索引文件
         。out 生成的可执行代码

MEMORY命令 描述系统实际的硬件资源

SECTION命令 描述“段”如何定位

下面给出一个例子

-c
-o hello.out
-m hello.map
-stack 100
-l rts2xx.lib
MEMORY
{
   PAGE 0: VECT:origin 0x8000,length 0x040
   PAGE 0: PROG:origin 0x8040,length 0x6000
   PAGE 1: DATA:origin 0x8000,length 0x400
}
SECTIONS
{
.vextors VECT PAGE 0
.text PROG PAGE 0
.bss DATA PAGE 1
.const DATA PAGE 1
}

存储模型说明

.cinit 存放程序中的变量初值和常量

.const 存放程序中的字符常量、浮点常量和用const声明的常量

.switch 存放程序中switch语句的跳转地址表

.text 存放程序代码

.bss 为程序中的全局和静态变量保留存储空间

.far 为程序中用far声明的全局和静态变量保留空间

.stack 为程序系统堆栈保留存储空间 用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果

.sysmem 用于程序中的malloc 、calloc 、和realoc 函数动态分配存储空间.text可执行代码

\"\" \"\" \"\" 点赞 1 \"\" \"\" 评论

本文链接: http://ccsb1.immuno-online.com/view-715934.html

发布于 : 2021-03-24 阅读(0)