一个DSP工程中主要包含如下几种类型文件:
<1>C文件(*.c及*.h);
<2>汇编文件(*.asm),注意有两种比较特殊的汇编文件,一种是中断向量表(vectors.asm-常见于不包含DSP/BIOS的程序中),
另一种是bootloader文件(该文件实现二级启动功能);
<3>库文件(*.lib、*.a、*.a64等),该类型文件是对源文件的一种封装,通常只提供API调用接口,不提供源码,既可以防止对
源文件的误修改,也可以起到保护知识产权的作用;
<4>dsp/bios(*.tcf),该文件见于使用DSP/BIOS中的工程中,是DSP/BIOS的配置文件,可以使用图形或文本方式进行DSP/BIOS的配置
<5>链接命令文件,该文件主要是定义存储器的物理空间(MEMORY)及程序段与物理空间的映射关系(SECTIONS);
    这里先从CMD文件说起,首先说一下MEMORY部分,这里以TMS320C6455的一个实例进行讲解:
MEMORY {
    L1PRAM:     o = 0x00E00000  l = 0x00008000  /* 32kB L1 Program SRAM/CACHE */
    L1DRAM:     o = 0x00F00000  l = 0x00008000  /* 32kB L1 Data SRAM/CACHE */
    L2RAM:       o = 0x00800000  l = 0x00200000  /* 2MB L2 Internal SRAM */
    EMIFA_CE2:  o = 0xA0000000  l = 0x00800000  /* 8MB EMIFA CE2 */
    EMIFA_CE3:  o = 0xB0000000  l = 0x00800000  /* 8MB EMIFA CE3 */
    EMIFA_CE4:  o = 0xC0000000  l = 0x00800000  /* 8MB EMIFA CE4 */
    EMIFA_CE5:  o = 0xD0000000  l = 0x00800000  /* 8MB EMIFA CE5 */
    DDR2_CE0:   o = 0xE0000000  l = 0x10000000  /* 256MB EMIFB CE0 */

上面的MEMORY部分主要分三个部分:存储器名    存储器起始地址     存储器长度;
该段定义与相应DSP芯片及硬件板卡(外部扩展存储部分)是密切相关的,大家可以查一下6455的手册的memory map部分,可以看到该部分
与上面的代码是一一对应的,上面定义的存储器名部分是用于SECTIONS后面段分配的。
接下来再说说SECTIONS部分,如下:
SECTIONS {
    .vector        >      0x00800000, RUN_START(_ISTP_START)
    .text          >  L2RAM
    .stack         >  L2RAM
    .bss           >  L2RAM
    .cio           >  L2RAM
    .const         >  L2RAM
    .data          >  L2RAM
    .switch        >  L2RAM
    .sysmem        >  L2RAM
    .far           >  L2RAM
    .args          >  L2RAM
    .ppinfo        >  L2RAM
    .ppdata        >  L2RAM

/* COFF sections */
    .pinit         >  L2RAM
    .cinit         >  L2RAM
}
上面这种是最简单的一种SECTIONS定义,这个SECTIONS部分的格式如下:
段名    >    存储器名
首先说一下什么是“section”,所谓的section是一个目标文件(*.obj)中的最小单元,它通常是占据一段连续存储空间的代码或数据,
借助“section”,程序员就可以使用模块化的编程思想,将相近功能的代码或数据放在一起(这类似于C语言中过程式编程语言,将一段
代码放在一个函数中)如果你是一个使用汇编语言编写代码的工程师,你对这点一定深有体会。

在上面的代码段中,段主要有两种(也可以说三种,因为.bss,.data和.text是汇编器默认创建的段,只是对于C编译器来说,它会创建自
己的.bss和.text,并且它不使用汇编器创建的.data段),一种是用户自定义段,一种是编译器创建的段,上面的.vector段就是用户自定
义段(该段通常是在vectors.asm中定义的,用于存储中断向量表,至于为什么将该段存放在000800000起始的段地址,就要查看6455的启动
方式(No BOOT方式)了),其余段就是C编译器创建的段了。
首先说一下如何使用自定义段,如果你使用汇编语言,你有两种方式创建自定义段,一个是".sect",一个是".usec",前者创建初始化段,
后者创建未初始化段,例如上面.vector段的创建语法如下:
标号(可选) 汇编指令    (段名)
__vector    .sect       ".vector"
在上面的这条语句之后到下一个段名之前的程序将被存储在.vector段中,然后就可以通过cmd文件中的section将该段
分配到特定存储空间

如果你使用C语言,你可以使用如下的方式将一些代码或数据存放到指定存储段,例如:
<c文件中定义>
#pragma DATA_SECTION (my_array,".self_section")
unsigned char my_array[100];
<cmd文件中>
SECTIONS
{    
    .self_section         >  L2RAM
}

这样就将一个数组分配到了L2RAM。

转自:http://blog.csdn.net/hanfei410/article/details/50134687

C6000 DSP技术深度探索---链接命令文件(cmd)相关推荐

  1. C6000 DSP技术深度探索-图像处理算法仿真到硬件实现踩过的那些坑

    C6000 DSP技术深度探索-图像处理算法仿真到硬件实现踩过的那些坑 写在前面 图像处理算法-仿真篇 DSP硬件移植篇-挖坑篇 DSP硬件移植篇-坑的种类 写在前面 时间如白马过隙,今天登录CSDN ...

  2. DSP下常使用的一些文件的扩展名

    (1).c C源文件 (2).cpp..cxx和.cc C 源文件 (3).sa 线性汇编源文件 (4).asm..abs..s*(扩展名以s字母开头) 汇编源文件 (5).obj 目标文件,是程序编 ...

  3. TI CCS CMD连接器命令文件说明

    TI CMD连接器命令文件 一般概念介绍 DSP(TMS320) cmd示例 TMS570 cmd示例 具体的cmd使用可见TI ARM/C28X Assembly Language Tools vx ...

  4. 深度探索Hyperledger技术与应用之超级账本初体验(附部署代码)

    2019独角兽企业重金招聘Python工程师标准>>> 本章零基础地介绍了如何快速体验超级账本搭建的区块链网络,我们先绕过了比较复杂的初始化配置,用官方提供的fabric-sampl ...

  5. Android深度探索(卷1)HAL与驱动开发 心得体会 第十章 嵌入式Linux的调用技术

    Android深度探索(卷1)HAL与驱动开发 心得体会 第十章  嵌入式Linux的调用技术 对于复杂的Linux驱动以及HAL等程序库,需要使用各种方法对其进行调试.例如,设置断点,逐步跟踪代码. ...

  6. 深度探索Hyperledger技术与应用之超级账本的典型交易流程

    上一篇分享了超级账本的系统逻辑架构和网络节点架构,本篇主要分享超级账本的典型交易流程. 1 典型交易流程 下图所示为Hyperledger Fabric 1.0典型的交易流程图. 从上一节的网络节点架 ...

  7. TI链接器命令文件入门

    TI链接器命令文件入门 目录 文章目录 TI链接器命令文件入门 目录 介绍 Memeory 指令 内存页 内存属性 代码内存分配 数据内存分配 SECTIONS指令 示意图 词汇表 Sector命名约 ...

  8. 技术沙龙 | TeaTalk 带你深度探索 SDN 网络技术再创新

    越来越多的企业.行业和政府机关顺应企业数字化转型.云服务和国家政策等趋势将业务迁移上云.随着移动云的快速发展,对网络提供差异化的服务能力也提出了很多新的考验.大规模数据中心.虚拟化 SDN 网络技术及 ...

  9. 【深度学习】DIY 人脸识别技术的探索(一)

    [深度学习]DIY 人脸识别技术的探索(一) 文章目录 摘要 问题重述 模型假设 定义与符号说明 问题分析 模型的建立与求解 参考 摘要 伴随着人工智能技术的发展,人们对信息安全有了更高的要求,传统的 ...

  10. 【深度学习】DIY 人脸识别技术的探索(二)

    [深度学习]DIY 人脸识别技术的探索(二) 文章目录 训练模型 工具 结果展示 问题二的模型建立与求解 基于 KNN 的人脸识别模型 训练模型 MTCNN 可以并行训练(3 个网络同时训练,前提是内 ...

最新文章

  1. python中font_Python ColorFont包_程序模块 - PyPI - Python中文网
  2. RCP开发小技巧(二)
  3. string转换为bigdecimal_java如何将String转换为Int
  4. 关于RF中类似于异常(TRY语句)情况的处理
  5. Linux操作系统中内存buffer和cache的区别--从free命令说起(转)
  6. LeetCode 2147. 分隔长廊的方案数
  7. 九度OJ 1435:迷瘴
  8. PostreSQL崩溃试验全记录
  9. 详尽Ubuntu18安装搜狗输入法教程
  10. sp2 xp 英文版序列号_64位 Windows XP SP2 VOL+简体中文语言包+序列号
  11. 智头条」十四五数字经济发展规划发布,工信部推动充电标准统一
  12. properties(属性文件)
  13. linux下开发51单片机
  14. edge保存页面html,Edge浏览器怎么保存网页 保存网页方法一览
  15. 综合latch 规避
  16. matlab实现幂法迭代求特征值和特征向量
  17. python3编写人工智能_人工智能学习第三章 编写第一个Python程序 及概念
  18. 【java】新建项目
  19. python正则表达式01
  20. Android源码国内源下载

热门文章

  1. MUI全国城市区县级联json转换sql建表
  2. 什么是归并排序 mergeSort
  3. 打车软件系统分析与设计方案
  4. 电芯知识汇总(转载)
  5. 【CFD学习】网格无关性验证
  6. 1.Kettle下载与安装
  7. php和python的选择排序算法,基于python的七种经典排序算法的详细介绍
  8. 传智php网课,传智自动刷网课视频工具
  9. AltiumDesigner 的 PcbDoc文件转 pads 的 PCB文件
  10. Honeywell EPKS 通用软件组态手册