- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 4.3.1 公共目标文件格式COFF 编译、汇编与链接程序建立的目标文件采用共用目标文件格式(Common Object File Format, COFF),便于模块化编程、管理代码段和存储器,即不必为程序代码或变量指定目标地址。 汇编器根据命令用适当的段将各部分程序代码和数据连在一起,构成目标文件。链接器分配存储单元,即把各个段重新定位到目标存储器中。 段(section,也称为块)是目标文件的最小单位,是在存储器中占据连续空间的代码和数据块,各段相互独立。 * 目标文件中段与目标存储器之间的关系 汇编器的COFF文件格式包括三个默认的段: .text段,即程序段,该段通常包含可执行代码即程序。 .data段,即数据段,该段通常包含已初始化的数据。 .bss段,即保留数据空间段, 该段通常为未初始化的数据保留空间。 * 汇编器和链接器允许用户建立和链接自定义的段。所有段可以分为初始化段和未初始化段两类。 初始化段包含程序代码和数据。 未初始化段则为未初始化的数据保留存储空间。 汇编命令.sect和.usect可以分别用来创建自定义的初始化段和未初始化段。 * 编译器对C语言编译后除了生成2个基本段,即.text、.bss外, 还生成其他一些段。 可分为初始化段和未初始化段。 初始化段包含可执行代码或常数表。C编译器产生的初始化段有 .pint、.const、.text、.cinit、.switch 。 .text段,包含可执行代码和常量(constant)。 .cinit段和.pint段,包含初始化变量和常量。 .const段,包含串常量,全局变量、静态变量的声明和初始化。 .switch段,包含switch语句表。 * 未初始化段用于保留存储器(通常为RAM)空间。C编译器产生的为初始化段有.bss、.stack、.sysmem段。 .bss段,为全局和静态变量保留空间。 .stack段,为C系统堆栈。用于保护函数的返回地址、分配局部变量、调用函数时传递参数。 .sysmem段, 为动态存储器分配保留空间, malloc函数使用。 * 初始化段链接 段名称 描述 限制 .text 可执行代码和常量 程序 .cint 已初始化的全局与静态变量的C初始化记录 64K数据 .pint 全局构造器(C++ constructor)表 程序 .switch 实现switch语句表 程序/64K数据 .const 已初始化的全局与静态const修饰变量,串常量 64K数据 * 未初始化段链接 段名称 内容 限制 .bss 全局与静态变量 64K数据 .stack 堆栈空间 64K数据 .sysmem malloc函数存储区 64K数据 * 存储器映射表 段(Section) 存储器类型(Type of Memory) 页面(Page) .text ROM 或RAM 0 .cint ROM 或RAM 0 .pint ROM 或RAM 0 .switch ROM 或RAM 0,1 .const ROM 或RAM 1 .bss RAM 1 .stack RAM 1 .sysmem RAM 1 * 4.3.2 链接命令文件 CCS的链接器可以有很多选项,如-l(包含库文件)、-stack(定义堆栈)、-o(定义输出文件)等,并且将用户软件定义的段与目标系统存储器物理地址对应关系定义清楚。 链接器选项的实现通常采用工程选项菜单或链接器命令文件(.cmd)两种方法。 编写一个链接器命令文件,将所有链接器选项写在文件中,并将此文件加入到工程,这样CCS在进行编译链接时,会自动按照链接器命令文件中的选项进行。 有两条链接器命令MEMORY和SECTIONS可以实现对程序存储器和数据存储器空间的分配。MEMORY命令定义目标存储器的配置,SECTIONS命令定义编程段与目标存储器的关系。 * MEMORY命令 MEMORY命令定义目标系统中可以使用的存储器范围,每个存储器范围具有名字、起始地址和长度。一般形式为 MEMORY { PAGE 0: name: origin=constant, length=constant; … PAGE n: name: origin=constant, length=constant; } PAGE n:定义存储器空间。n=0~254. 通常PAGE 0定义程序存储器,PAGE 1定义数据存储器。 name:存储器范围名字。可以是1~8个字符。 origin或简写为o:存储器范围的起始地址。 length或简写为l:存储器范围的长度。 * SECTIONS命令
您可能关注的文档
最近下载
- 高中英语课件(人教版)必修第一册 Unit 3 Sports and Fitness.pptx VIP
- Unit3 Sports and fitness 单元测试 人教版高中英语必修第一册.docx VIP
- 2024中华人民共和国农村集体经济组织法详细解读课件.pptx VIP
- 人教版(2019)高中英语必修第一册 Unit 3 Sports and fitness 知识点详解.doc VIP
- 面诊、手诊、足诊、耳诊图解教程(价值千元).pptx VIP
- 新22S2给水工程参考标准.docx
- 中国科学技术史序言(节选).pptx VIP
- 2022年消防设施操作员中级理论知识模拟题(含答案).pdf VIP
- 雨污水管网迁移改造工程施工方案.pdf VIP
- 最新部编版语文六年级下册全册单元、期中、期末复习题(附答案-共8套-2022.pdf VIP
文档评论(0)