热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DSP中cmd文件的命令文件组成及其作用

本文介绍了DSP中cmd文件的命令文件的组成和作用,包括链接器配置文件的存放链接器配置信息、命令文件的组成、MEMORY和SECTIONS两个伪指令的使用、CMD分配ROM和RAM空间的目的以及MEMORY指定芯片的ROM和RAM大小和划分区间的方法。同时强调了根据不同芯片进行修改的必要性,以适应不同芯片的存储用户程序的需求。

DSP中cmd文件

CMD 的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件,其中比较关键的就是MEMORY和SECTIONS两个伪指令的使用。

1、命令文件的组成

命令文件的开头部分是要链接的各个子目标文件的名字,这样链接器就可以根据子目标文件名,将相应的目标文件链接成一个文件;接下来就是链接器的操作指令,这些指令用来配置链接器,接下来就是MEMORY和SECTIONS两个伪指令的相关语句,必须大写

CMD分配ROM和RAM空间,告诉链接程序怎样计算地址和分配空间。所以不同的芯片就有不同大小的ROM和RAM,存放用户程序的地方也不尽相同。所以要根据芯片进行修改,分为 MEMORY和SECTIONS两个部分。

MEMORY:用来指定芯片的ROM和RAM的大小和划分出几个区间PAGE 0对应ROM, PAGE 1对应RAM。PAGE 里包含的区间名字与其后面的参数反映了该区间的起始地址长度。(描述系统硬件资源)

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

}

PAGE 0 : VECS(区间名字): origin(起始地址) = 800000h , length (长度)=40h 

如应用字段名".vectors"的程序或数据将被放到vecs,vecs是page0即是rom空间00H至40H的地方

SECTIONS:在程序里添加下面的段名,如.vectors。用来指定该段名以下,另一个段名以上的程序(属于PAGE0)或数据(属于PAGE1)放到">"符号后的空间名字所在的地方。(描述"段"如何定位)

SECTIONS

{

.vectors     :     { } > VECS PAGE 0     /* Interrupt vector table */

.reset     :     { } > VECS PAGE 0     /* Reset code */

............

}

.vectors,.reset都是段名。加不加"."随你便,即.vectors表示名为 ".vectors"的段。

{}表示段的全部{}> VECS PAGE 0表示将段的全部放入名为 VECS PAGE 0的内存区。

分成两个基本的部分:
(1)被初始化的Section(包含数据表和可执行代码

.text:    它包含所有的可执行代码和常数,必须放在程序页

.cinit:    它包含初始化的变量和常量表,要求放在程序页

.pinit:    它包括全局构造器(C++)初始化的变量表,要求放在程序页

.const:    它包括字符串、声明、以及被明确初始化过的全局和静态变量,要求放在低地址数据页

.econst:    是在使用大存储器模式时使用的,包括字符串、声明、以及被明确初始化过的全局变量和静态变量,可以在数据页的任何地方。

.switch:它包括为转换声明设置的表格,可以放在程序页,也可以放在低地址的数据页。

(2)未被初始化的Section(为程序运行中创建和存放的变量在存储器中保留空间)

   .bss:它为全局变量和静态变量保留空间.在程序开始运行时,C导入路径把数据从.cinit节复制出去然后存在.bss节中.要求放在低地址的数据页.

   .ebbs:它是在远访问(C)和大存储器模式下使用,它为全局变量和静态变量保留空间.在程序开始运行时,C导入路径把数据从.cinit段复制出去然后存在.ebss节中。可以存放在数据页的任何地方。

   .stack:为C系统堆栈保留空间,这部分存储器为用来将声明传给函数及为局部变量留出空间。要求放在低地址的数据页。

   .system:动态存储器分配保留空间,这个空间用于malloc函数,如果不使用malloc函数,这个段的大小就是0。要求放在低地址的数据页。

   .esystem:动态存储器分配保留空间,这个空间用于外部malloc函数,如果不使用外部malloc函数,这个段的大小就是0。可也放在数据页的任何地方 

eg:命令文件示例
  MEMORY
  {
   PAGE 0    :     VECS: origin = 00000h, length = 00040h     //程序复位
                    PVECS: origin = 00040h, length = 00070h    //外围模块中断向量
                    PROG: origin = 000b0h, length = 07F50h    //片上Flash
   PAGE 1    :     B0: origin = 00200h, length = 00100h        //DRAM B0块
                   B1: origin = 00300h, length = 00100h       //DRAM B1块
                   B2: origin = 00060h, length = 00020h       //DRAM B2块
                   SARAM: origin = 00800h, length = 00800h    //SRAM块

                          EXT:origin = 08000h, length = 08000h      //外部存储器
  }
  SECTIONS
  {
  .reset       : { } > VECS PAGE 0         //复位中断向量
  .vectors     : { } > VECS PAGE 0   //中断向量表

      .pvecs       : { } > PVECS PAGE 0         //外围模块中断向量表
  .text         : { } > PROG PAGE 0         //代码
  .cinit     : { } > PROG PAGE 0    
      .bss         : { } > SARAM PAGE 1         //块B2
      .const     : { } > SARAM PAGE 1         //块B2
     .stack     : { } > B1     PAGE 1          //堆栈,40个单元
  }

例:

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 ALLOCATION */

/*--------------------------------------------------------------------------*/

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

}

系统定义:

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

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

.switch    存放c程序中的switch语句的跳针表;

.text        存放c程序的代码;

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

.far        为c程序中用far生命的全局和静态变量保留空间;

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

.system    用于c程序中malloc、calloc和realloc函数动态分配存储空间;

6455.cmd文件内容

-l rts64plus.lib

MEMORY

{

VECS:     o = 0x00800000 l = 0x00000200

BOOT:     o = 0x00800200 l = 0x00000200

L2RAM:     o = 0x00800400 l = 0x001FFC00 /* 2MB L2 Internal SRAM */

L1PRAM:     o = 0x00E00000 l = 0x00008000 /* 32kB L1 Program SRAM/CACHE */

L1DRAM:     o = 0x00F00000 l = 0x00008000 /* 32kB L1 Data SRAM/CACHE */

EMIFA_CE2:     o = 0xA0000000 l = 0x00800000 /* 8MB EMIFA CE2 */

EMIFA_CE3:     o = 0xB0000000 l = 0x00800000 /* 8MB EMIFA CE2 */

EMIFA_CE4:     o = 0xC0000000 l = 0x00800000 /* 8MB EMIFA CE2 */

EMIFA_CE5:     o = 0xD0000000 l = 0x00800000 /* 8MB EMIFA CE2 */

DDR2_CE0:     o = 0xE0000000 l = 0x20000000 /* 512MB EMIFB CE0 */

}

,

,

SECTIONS

{

"vectors"     > VECS

"bootload"     > BOOT

    .csl_vect     > L2RAM

.text         > L2RAM

.stack     > L2RAM

.bss     > L2RAM

.cio     > L2RAM    //printf等输入输出函数使用的缓冲区所在块

.const     > L2RAM

.data     > L2RAM

.switch     > L2RAM

.sysmem     > L2RAM

.far     > L2RAM

.args     > L2RAM

.ppinfo     > L2RAM

.ppdata     > L2RAM

/* COFF sections */

.pinit     > L2RAM

.cinit     > L2RAM

/* EABI sections */

.binit     > L2RAM

.init_array     > L2RAM

.neardata     > L2RAM

.fardata     > L2RAM

.rodata     > L2RAM

.c6xabi.exidx     > L2RAM

.c6xabi.extab     > L2RAM

}

DSP中cmd文件


推荐阅读
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • 本文介绍如何在应用程序中使用文本输入框创建密码输入框,并通过设置掩码来隐藏用户输入的内容。我们将详细解释代码实现,并提供专业的补充说明。 ... [详细]
author-avatar
醉苏芳华
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有