1640|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

DSP TMS320C6000基础学习cmd文件分析 [复制链接]

DSP中的CMD文件是链接命令文件(Linker Command File),以.cmd为后缀。 在分析cmd文件之前,必需先了解 (1)DSP具体芯片的内存映射(Memory Map) (2)知道点链接的知识,知道C程序中段的概念 (3)知道RAM,Flash等存储模块的区别 ====================================================================== 1. coff目标文件 ====================================================================== coff是一种流行的二进制可执行文件格式,在CCS v5中扩展名为.out,可以直接 下载到芯片中。可执行文件包括段头、可执行代码、初始化数据、可重定位信息 和符号表字符串表等信息。 编译器处理段的过程为: (1)把每个源文件都编译成独立目标文件(.obj),每个目标文件都有自己的段 (2)链接器将目标文件中相同段名的部分连接在一起,生成最终的coff可执行文件 CCS v5中的Compile Files完成功能(1),Build完成功能(2)。 ====================================================================== 2. TMS320C6713内存映射 ======================================================================
====================================================================== 3. 自定义代码段和数据段 ====================================================================== // 将symbol分配到section name指示的数据段 #pragma DATA_SECTION(symbol, "section name"); // 将symbol分配到section name指示的代码段 #pragma CODE_SECTION(symbol, "section name"); 常常结合结构体定义symbol,如下,
  • volatile struct Symbol symbol; // Symbol预先定义好的描述特定外设的结构
复制代码
比如,对于C6713中的Timer0外设,做如下定义,
  • struct Timer0 {
  • ...
  • }
  • #pragma DATA_SECTION(C6713_Timer0, "C6713_Timer0_cmd");
  • volatile struct Timer0 C6713_Timer0;
  • "C6713_Timer0_cmd"将在cmd文件中分配空间。
复制代码
====================================================================== 4. cmd文件 ====================================================================== cmd文件主要用于完成链接的功能,因此可以在cmd文件中使用链接命令,比如:
  • -stack 0x200 设置栈大小为0x200字节
  • -heap 0x200 设置堆大小为0x200字节
  • -l rst67xx.lib 链接rst67xx.lib库
复制代码
除了链接命令外,cmd 文件还包括MEMORY和SECTOINS两部分,分别用于存储区的划分和段的分配。 MEMORY划分的格式为:
  • L2SRAM : o = 00000000h l = 00030000h /* L2 SRAM 192K */
复制代码
o表示起始地址,l表示存储区长度(以字节为单位) 一个简单的例子(TMS320C6713为例,不同芯片不同),外设只添加了Timer0:
  • MEMORY
  • {
  • L2SRAM : o = 00000000h l = 00030000h /* L2 SRAM 192K */
  • L2CACHE : o = 00030000h l = 00010000h /* L2 Cache 64 K */
  • /* Peripheral */
  • CPU_TIMER0 : o = 01940000h l = 00040000 /* Timer0 */
  • EXTERNAL : o = 80000000h l = 80010000h
  • }
  • SECTIONS
  • {
  • /* Allocate program areas */
  • .text > L2SRAM /* code segment */
  • .cinit > L2SRAM /* init segment */
  • /* Allocate data areas */
  • .stack > L2SRAM
  • .far > L2SRAM
  • .switch > L2SRAM /* C switch table */
  • .tables > L2SRAM
  • .data > L2SRAM /* data segment */
  • .bss > L2SRAM /* data that haven't init */
  • .sysmem > L2SRAM
  • .const > L2SRAM /* string, const ... */
  • .cio > L2SRAM
  • .buffers > EXTERNAL
  • C6713_Timer0_cmd > CPU_TIMER0 /* Timer 0 */
  • }
复制代码
cmd文件包括2部分 —— MEMORY与SECTIONS MEMORY完成地址空间的划分; SECTIONS完成地址空间的分配到具体用途(除了程序中通用段之外还可以有自定义段)。 NOTES: 平时开发时都是将程序下载到RAM空间,当要发布时需要下载到Flash空间, 此处为SRAM的cmd文件,Flash的cmd文件有所不同。
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表