对于TMS320F2812的CMD文件的理解讲述.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
对于TMS320F2812的CMD文件的理解 1.COFF格式 ??? 要谈CMD文件,首先不可避免的要谈下COFF格式,COFF格式是通用目标文件格式(Common Object File Format)的缩写,它是一种流行的二进制可执行文件格式,在DSP里二进制可执行文件包括库文件(.lib)、目标文件(.obj)和最终可执行文件(.out)。详细的COFF格式文件包括段头、可执行代码、初始化数据、可重定位信息、行号入口、符号表、字符串。对于DSP的C语言编程我们只需要了解定义段和给段分配空间即可。采用COFF格式更利于我们对其进行模块化编程,我们可以自由的把哪些段分配到哪些空间。 2.Section (1)其次,在编写CMD文件得时候要碰到SectionS命令,SectionS命令的英文理解就有区域的意思,我们利用SectionS来将目标文件的代码放到指定的区域中。SectionS目标文件中最小的单位我们称之为块,一个块就是最终在存储器映像中占据连续空间的一段代码或者数据。COFF文件格式默认有三个块: .text?????? 存放可执行代码; .data?????? 存放已初始化数据; .bss??????? 为未初始化数据留下的保留空间。 (2)汇编器对块的处理和设置 未初始化块的设置: .bss??????? 变量存放空间; .usect????? 用户自定义的未初始化段; 初始化块的设置: .text?????? 汇编指令代码 .data?????? 常数数据(比如对变量的初始化数据) .sect?????? 用户自定义的已初始化段 .asect????? 类似于.sect,多了绝对地址定位功能,一般不用 (3)C语言对块得的设置和处理 未初始化块(data) .bss??????? 存放全局和静态变量 .ebss?????? 长调用的.bss(超过了64K地址限制) .stack????? 存放C语言的栈 .sysmem???? 存放C语言的堆 .esysmem????长调用的.sysmem(超过了64K地址限制) 初始化块 .text?????? 可执行代码和常数(program) .switch???? switch语句产生的常数表格(program/低64K数据空间) .pinit????? Tables for global constructors (C++)(program) .cinit????? 用来存放对全局和静态变量的初始化常数值(program) .const????? 全局和静态的const变量初始化值和字符串常数,(data) .econst???? 长.const(可定位到任何地方)(data) (4)C语言自定义块 #pragma DATA_SECTION(函数名或者全局变量名,“用户自定义在数据空间的段名”); #pragma CODE_SECTION(函数名或者全局变量名,“用户自定义在程序空间的段名”); 必须注意:不能在函数体内声明,必须在定义和使用前声明。#pragma可以阻止对未调用的函数的优化(优化我也不太理解)。 3.2812的CMD文件 (1)在CMD文件中有两个伪指令MEMORY和SECTIONS,其中SECTIONS的用法在上面已经有了介绍,就是将生成的代码或者数据分配到指定的存储器的映射空间去。哪里是映射空间呢,这个就是由MEMORY这个伪指令来定义的,它的作用就是对整个存储器进行分区,然后给每个存储器进行命名,DSP只认物理地址(在我的第一篇日志里已经详细阐述了)。下面先写下这两个伪指令的语法格式: MEMORY { ?PAGE 0: name1[(attr)]origin=constant, length=constant; ?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,…] ??????? Name:[property,property,…] ??????? Name:[property,property,…]} Name:源程序中的段名。如.text,Property:段的属性参数。一个段的属性参数包括下列五种: (1)Load allocation,由它定义将输出段加载到存储器中的什么位置。 语法:load: allocation????

文档评论(0)

整理王 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档