




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、对于TMS320F2812的CMD文件的理解 1.COFF格式 要谈CMD文件,首先不可避免的要谈下COFF格式,COFF格式是通用目标文件格式(Common Object File Format)的缩写,它是一种流行的二进制可执行文件格式,在DSP里二进制可执行文件包括库文件(.lib)、目标文件(.obj)和最终可执行文件(.out)。详细的COFF格式文件包括段头、可执行代码、初始化数据、可重定位信息、行号入口、符号表、字符串。对于DSP的C语言编程我们只需要了解定义段和给段分配空间即可。采用COFF格式更利于我们对其进行模块化编程,我们可以自由的把哪
2、些段分配到哪些空间。2.Section(1)其次,在编写CMD文件得时候要碰到SectionS命令,SectionS命令的英文理解就有区域的意思,我们利用SectionS来将目标文件的代码放到指定的区域中。SectionS目标文件中最小的单位我们称之为块,一个块就是最终在存储器映像中占据连续空间的一段代码或者数据。COFF文件格式默认有三个块:.text 存放可执行代码;.data 存放已初始化数据;.bss
3、0; 为未初始化数据留下的保留空间。(2)汇编器对块的处理和设置未初始化块的设置:.bss 变量存放空间;.usect 用户自定义的未初始化段;初始化块的设置:.text 汇编指令代码.data 常数数据(比如对变量的初始化数据).sect
4、 用户自定义的已初始化段.asect 类似于.sect,多了绝对地址定位功能,一般不用(3)C语言对块得的设置和处理未初始化块(data).bss 存放全局和静态变量.ebss 长调用的.bss(超过了64K地址限制).stack 存放C语言的栈.sysmem
5、160; 存放C语言的堆.esysmem 长调用的.sysmem(超过了64K地址限制)初始化块.text 可执行代码和常数(program).switch switch语句产生的常数表格(program/低64K数据空间).pinit Tables for global constructors (C+)(program).cinit
6、 用来存放对全局和静态变量的初始化常数值(program).const 全局和静态的const变量初始化值和字符串常数,(data).econst 长.const(可定位到任何地方)(data)(4)C语言自定义块#pragma DATA_SECTION(函数名或者全局变量名,“用户自定义在数据空间的段名”);#pragma CODE_SECTION(函数名或者全局变量名,“用户自定义在程序空间的段名”);必须注意:不能在函数体内声明,必须在定义和使用
7、前声明。#pragma可以阻止对未调用的函数的优化(优化我也不太理解)。3.2812的CMD文件(1)在CMD文件中有两个伪指令MEMORY和SECTIONS,其中SECTIONS的用法在上面已经有了介绍,就是将生成的代码或者数据分配到指定的存储器的映射空间去。哪里是映射空间呢,这个就是由MEMORY这个伪指令来定义的,它的作用就是对整个存储器进行分区,然后给每个存储器进行命名,DSP只认物理地址(在我的第一篇日志里已经详细阐述了)。下面先写下这两个伪指令的语法格式:MEMORY PAGE 0: name1(attr)origin=constant, length=constant
8、; PAGE n: name1(attr)origin=constant, length=constant;PAGE n中页号的最大值是255,每个PAGE代表一个完全独立得地址空间,通常n=0为数据空间,n=1为程序空间,name是对存储区间命名,attr规定了存储器得属性,R-读,W-写,一般我们不写的 ,origin,起始地址,length,该存储区间的大小。SECTIONS Name:property,property,
9、160; Name:property,property, Name:property,property,Name:源程序中的段名。如.text,Property:段的属性参数。一个段的属性参数包括下列五种:(1)Load allocation,由它定义将输出段加载到存储器中的什么位置。语法:load: >allocation (allocation是将逻辑段定位的地址说明)例如:
10、0; .text: load=0x1000 ;将输出段定位到一个特定的地址 .text: load>ROM ;将输出段定位到命名
11、为ROM的存储区 .text: align=0x80 ;关键词align规定输出段.text定位到从地址边界0x80开始 .text:
12、; block(128) ;关键词bolck规定段必须在两个地址边界之内,如果段太 &
13、#160; ;大,就从一个地址边界开始 .text: PAGE0 ;将输出段定位到PAGE0如果输出段只定位
14、一个位置,帽可省去关键字load。如:.text: >ROM如果要用到一个以上参数,可以将它们排成一行。如:.text: >ROM align 16 PAGE 2或.text: load(ROM align(16) PAGE(2)(地址边界是2的N次方幂的地址,如地址边界定为16,则其地址为xxx0h。)(2)Run allocation,由它定义输出段在存储器的什么位置开始运行。语法:run=allocation或run>allocation链接器为每个输出段在目标存储器中分配两个地址:加载地址和执行地址。通常这两个地址是相同的。但如要先将程序加载到ROM,然后
15、在RAM中以较快的速度运行。则可两次定位,如: .fir: load=ROM,run=RAM(3)Input sections,由它定义哪些输入段组成输出段。 语法:input_sections .text: *(.text)
16、160; 这样就把所有的.text段链接成.text段输出。也可以明确的用文件名和段名来确定输入段: .text: F1.obj (.text,sect)
17、 ;链接F1.obj的.text、.sect段 F2.obj (sect) ;
18、60; F3.obj 链接f3.obj的所有段 (4)Section type,用它为输出段定义特殊形式的标志 语法:Type=COPY、Type= DSECT、Type=NOLOAD
19、(5)Fill value,当初始化段中存在未初始化的存储区间时,对其填充一指定值。 语法:fill: value 或name:=value4.2812的CMD文件的编写下面就来谈谈我对2812在写CMD文件的时候的一点理解,不足的地方希望各位看官拨冗指正 。(1)片内存储器分区MEMORY先翻开相关芯片的存储空间的资料,然后分配一下你得程序存储空间和数据存储空间,即PAGE0和PAGE1,程序存储空间里通常放XINTF的ZONE0,1,2,6,7FLASHA-J,OPT,H0,bootROM,其中BOOTROM和XINTF得ZONE7是复用得,在不
20、同得模式下选取不同的方式,MP/MC=0-BOOTROM,MP/MC=1-XINTFZONE7,在片内数据空间上定义各个存储器,这是也可以翻开你的书本,查下每章开头,一般都有这一章所涉及的所以的寄存器的地址,然后根据这些地址分配一下存储的单元的起始地址和空间的大小。(2)SECTIONGS分块这里举一个例子阐述一下分块的方法,例如我们在数据存储空间定义了SYSTEM块,主要就是给系统的时钟、看门狗、锁存器等分的一个空间,这个空间的大小是0x0020H,也就是10进制得32个字节单元,为什么要分32个字节单元呢,在书上我们可以查的系统得这一部分所对应的寄存器的名称和寄存器的字节数如下:Reser
21、ved:10;HISPCP:1;LOSPCP:1;PCLCR:1;Reserved:1;LPMCR0:1;LPMCR1:1;Reserved:1;PLLCR:1;SCSR:1;WDCNTR:1;Reserved:1;WDKEY:1;Reserved:3;WDCR:1;Reserved:6;计算一下,整个的存储器空间的大小是10+1+1+1+1+1+1+1+1+1+1+1+1+3+1+6=32.这就是为什么是32个字节的原因。记住,此时这一块的名字是SYSTEM(当然你也可以另行定义)。在SECTIONS中我们定义输出段的名字是SysCtrlRegsFile,其指向的就是SYSTEM.即SysC
22、trlRegsFile:>SYSTEM,PAGE0然后我们在自己的头文件中定义结构体和联合体的时候,例如定义了一个SYSTEM_REGS的结构体,里面包含了系统的控制寄存器的联合体或者结合体,可以这么写:struct SYSTEM_REGSUnit32 Reserved:10;union HISPCP_REGS HISPCP;union LOSPCP_REGS LOSPCP;union PCLKER_REGS PCLKER;Unit32 Reserved:1;union LPMCR
23、0_REGS LPMCR0;union LPMCR1_REGS LPMCR1;Unit32 Reserved:1;union PLLCR_REGS PLLCR;union SCSR_REGS SCSR; 貌似这个是不用定义联合体的,Unit32 SCSR:1;union WDCNTR_REGS WDCNTR;Unit32 Reserved:1;union WDKEY_REGS WDKEY;Unit32 Reserved:3;union WDCR_REGS WDCR;Unit32 Reserved:6;SysCtrlRegsFile;这里面得联合体
24、都有其自己的定义,例如PLLCR_REGSstruct PLLCR_BITSUnit16 DIV:4;Unit16 Reserved:12;union PLLCR_REGSUnit16 all;struct PLLCR_BITS bit;这样我们要对PLLCR寄存器操作得时候就只需这么写:SysCtrlRegsFile.PLLCR.all=0xXXXX;或者SysCtrlRegsFile.PLLCR.bit.DIV=0xXXXX;bit是结构体的一个变量 ,相信C语言得结构体和联合体(也叫共用体)大家都学得不比偶差吧。对其操作过程就是自动得找到了SysCtrlRegsFi
25、le对应得那片空间0x00007010-0X0x702F,然后PLLCR就是就是里面的第18个空间即0x00007021,相信这么理解大家都应该明白了撒。所有的寄存器都是这样写得哦。 。这就是我的理解,希望各位看官指教,拨冗指正,坚信成功源于共享! TMS320F2812代码运行性能的研究发布: 2008-4-09 22:23 | 作者: 王效东 | 来源: 单片机与嵌入式系统应用 | 查看: 7次 引 言TMS320F2812是目前性能非常优秀的32位定点DSP,集成了多种外设。对TMS320F2812开发通常利用TI公司的CCS2集成开发环境,使用JTAG接
26、口仿真器连接目标板,可以不占用用户资源实现全速断点调试;仿真调试完成后对CMD文件进行相关修改,并用 RTS2800_FL04830LIB替换RTS2800NLIB,必要时对程序中变量与函数分配的空间做部分调整后,编译项目得到输出文件;在 CCS2集成开发环境中完成下载、加密等操作后,断电脱离仿真机,成为独立运行的嵌入式系统。然而,相当多的应用设计者常常面临程序仿真通过,但独立运行失败的情况,表现均为程序代码运行性能比估计的要差很多,以致来不及处理实时数据。由于代码在 Flash中运行的时间比在SARAM中仿真的时间长,有的设计试验出现在Flash中运行比仿真慢4倍以上的结果,使设计只能停留在
27、仿真通过的层次上。1 分析TI公司提供的一篇文档资料spra958epdf,描述了在内部Flash中运行程序的相关知识,说明当在RAM中仿真速度为150 MIPS时,相应Flash中的执行速度可达90lOO MIPS;同时。在此文档资料中提供了参考实例,但介绍性文字较多,实现高性能的具体配置方式描述不够具体。经反复阅读TI公司的其他相关文档资料,并编程对比实验,笔者摸索出实现Flash中运行速度达到RAM中仿真速度的75左右的方法,与TI指标相符合。下面详细说明试验程序与方法。限于篇幅,只列出与试验过程密切相关部分的配置情况。试验程序使用的空间分配如表1所列。试验程序如下:下面是CMD文件关键内容。因RAM仿真与下载Flash所用CMD文件有差异,故为节省篇幅,混合写在一起,差异部分参见说明。试验程序运行时,用示波器在TMS320F2812的XF输出脚可以测量到重复脉冲(如图1所示),表2为对应的测量结果。函数I
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 备考全程2025年中级经济师试题及答案
- 用气用电安全教育
- 自考学前教育科学研究
- 中班绘本教案《微笑》
- 稿定设计自己做的
- 经济法概论考试中的关键试题和答案
- 园林设计景观规划
- 在校生实习经历及成果证明书(5篇)
- 水利水电工程重要定义试题及答案
- 经济法行行政管理试题及答案分享
- 为什么你的学生不思考?主题班会分享
- 2024至2030年成都市酒店市场前景及发展战略研究报告
- 2024年人力资源招聘服务合同范本
- 重庆市(六校联考)2025届九年级物理第一学期期末质量跟踪监视模拟试题含解析
- 2024辽宁省各市农村电力服务限公司联合招聘220人重点基础提升难、易点模拟试题(共500题)附带答案详解
- ISO15614-1 2017 金属材料焊接工艺规程及评定(中文版)
- MOOC 一生的健康锻炼-西南交通大学 中国大学慕课答案
- 《中国溃疡性结肠炎诊治指南(2023年)》解读
- 护理文献分享的课件
- 重庆十八中学2024届八年级下册数学期末教学质量检测试题含解析
- 企业周年庆蛋糕定制协议
评论
0/150
提交评论