DSP CMD文件的小理解

          本文大部分内容都是别人,不是大部分,应该是全部:

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

 

     MEMORY命令:描述系统实际的硬件资源
     SECTION
命令:描述如何定位
          

所以不同的芯片就有不同大小的

            存储模型:c程序的代码和数据如何定位
           系统定义
             .cinit
存放程序中的变量初值和常量
             .const
存放程序中的字符常量、浮点常量和用const声明的常量
            .switch
存放程序中switch语句的跳转地址表
            .text
存放程序代码
            .bss
为程序中的全局和静态变量保留存储空间
            .far
为程序中用far声明的全局和静态变量保留空间
            .stack
为程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果

           .sysmem用于程序中的malloccalloc、和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


}

 

.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值