您的位置:首页 > 其它

DSP CMD文件的小理解

2014-05-12 14:46 330 查看
本文大部分内容都是别人,不是大部分,应该是全部:

首先理解什么是cmd文件,他是干嘛的,cmd文件首先它是用来分配ROM和RAM用的,告诉连接器怎么样计算地址和分配空间。所以不同的DSP型号,它都有不同的内存分配方式。




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

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



所以不同的芯片就有不同大小的
存储模型:c程序的代码和数据如何定位

系统定义

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

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

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

.text存放程序代码

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

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

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

.sysmem用于程序中的malloc、calloc、和realoc函数动态分配存储空间.

.text段和.cinit段被固定连接至程序空间,存储器类型可以使ROM或RAM(一般为ROM);.bss段和.stack段则被固定连接至数据空间,存储器类型只能是RAM。.const的使用则相对灵活。.const段被固定连接至数据空间,但存储器类型可以是ROM或RAM,这有别于.cinit段、cinit段被连接至程序空间,程序在执行时,再被复制到数据空间中的.bss段。这样一张未用const声明的数据表要同时占用程序(.cinit段)和数据空间(.bss段)的一部分。与之相比较,如果系统支持数据ROM,则该数据表改用const声明后,只需占用数据空间(.const段)的一部分。

下面是我的sections里面的一些东西。

SECTIONS {

.bss: {} > DDR2

.hwi_vec: {

HWI_A_VECS = .;

*(.hwi_vec)

} align = 0x400 > DDR2

.far: {} > DDR2

.sysdata: {} > DDR2

frt: {} > DDR2

.mem: {} > DDR2

.bios: {} > DDR2

.cio: {} > DDR2

.data: {} > DDR2

.gio: {} > DDR2

.pinit: {} > DDR2

.sys: {} > DDR2

.sysregs: {} > DDR2

.text: {} > DDR2

.cinit: {} > DDR2

.switch: {} > DDR2

.gblinit: {} > DDR2

.sysinit: {} > DDR2

.trcdata: {} > DDR2

.hwi: {} > DDR2

.rtdx_text: {} > DDR2

GROUP {

.const: align = 0x8 {}

.printf (COPY): {}

} > DDR2

.args: align=4 fill=0 {

*(.args)

. += 0x4;

} > DDR2

.stack: {

GBL_stackbeg = .;

*(.stack)

GBL_stackend = GBL_stackbeg + 0x400 - 1;

_HWI_STKBOTTOM = GBL_stackbeg + 0x400 - 4 & ~7;

_HWI_STKTOP = GBL_stackbeg;

} > DDR2

.DDR2$heap: {

DDR2$B = .;

_DDR2_base = .;

DDR2$L = 0xa00000;

_DDR2_length = 0xa00000;

. += 0xa00000;

} > DDR2

.dsm: {} > IRAM

.mbx: {} > IRAM

.sem: {} > IRAM

.TSK_idle$stk: {

*(.TSK_idle$stk)

} > IRAM

/* LOG_system buffer */

.LOG_system$buf: align = 0x100 {} > IRAM

.rtdx_data: align = 0x40 { . += 0x80; *(.rtdx_data) } > IRAM

/* RTA_fromHost buffer */

.hst1: align = 0x4 {} > IRAM

/* RTA_toHost buffer */

.hst0: align = 0x4 {} > IRAM

.mbx$que: align = 0x4 {

mbx$queElems = .;

. += 12;

} > IRAM

.mbx1$que: align = 0x4 {

mbx1$queElems = .;

. += 12;

} > IRAM

.trace: fill = 0x0 align = 0x4 {

_SYS_PUTCBEG = .;

. += 0x200;

_SYS_PUTCEND = . - 1;

} > IRAM

.hst: {

HST_A_TABBEG = .;

_HST_A_TABBEG = .;

*(.hst)

HST_A_TABEND = .;

_HST_A_TABEND = .;

HST_A_TABLEN = (. - _HST_A_TABBEG) / 20;

_HST_A_TABLEN = (. - _HST_A_TABBEG) / 20;

} > IRAM

.log: {

LOG_A_TABBEG = .;

_LOG_A_TABBEG = .;

*(.log)

LOG_A_TABEND = .;

_LOG_A_TABEND = .;

LOG_A_TABLEN = (. - _LOG_A_TABBEG) / 24;

_LOG_A_TABLEN = (. - _LOG_A_TABBEG) / 24;

} > IRAM

.pip: {

PIP_A_TABBEG = .;

_PIP_A_TABBEG = .;

*(.pip)

PIP_A_TABEND = .;

_PIP_A_TABEND = .;

PIP_A_TABLEN = (. - _PIP_A_TABBEG) / 100;

_PIP_A_TABLEN = (. - _PIP_A_TABBEG) / 100;

} > IRAM

.sts: {

STS_A_TABBEG = .;

_STS_A_TABBEG = .;

*(.sts)

STS_A_TABEND = .;

_STS_A_TABEND = .;

STS_A_TABLEN = (. - _STS_A_TABBEG) / 16;

_STS_A_TABLEN = (. - _STS_A_TABBEG) / 16;

} > IRAM

}



.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: