存储器的结构、映像及CMD文件的编写解读.pptVIP

存储器的结构、映像及CMD文件的编写解读.ppt

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
存储器的结构、映像及CMD文件的编写解读

xx.c xx.obj Compile yy.c yy.obj zz.c zz.obj A段 B段 C段 A段 B段 B段 C段 Build A段: B段: C段: … … … … … … 编译器 链接器 project.out 7.3.2 C语言生成的段 两大类:已初始化的段和未初始化的段 已初始化的段含有真实的指令和数据,存放在程序存储空间 未初始化的段只是保留变量的地址空间,在DSP上电调用_c_int0初始化库前,未初始化的段并没有真实的内容。存放在数据存储空间。 7.3.2-1 已初始化的段 .text:编译C语言中的语句时,生成的汇编指令代码存放于此。 .cinit:存放用来对全局和静态变量初始化的常数。 .const:包含字符串常量和初始化的全局变量和静态变量(由const声明)的初始化和说明。 .econst:包含字符串常量和初始化的全局变量和静态变量(由far const声明)的初始化和说明。 .pinit:全局构造器(C++)程序列表。 .switch:存放switch语句产生的常数表格。 7.3.2-2 未初始化的段 .bss:为全局变量和局部变量保留的空间,在程序上电时,.cinit空间中的数据复制出来并存储在.bss空间中。 .ebss:为使用大寄存器模式时的全局变量和静态变量预留的空间,在程序上电时,.cinit空间中的数据复制出来并存储在.ebss中。(rst_2800_ml.lib和rst_2800_ml_eh.lib库文件使用时 ) .stack:为系统堆栈保留的空间,主要用于和函数传递变量或为局部变量分配空间。 .system:为动态存储分配保留的空间。如果有宏函数,此空间被宏函数占用,如果没有的话,此空间保留为0。 .esysmem:为动态存储分配保留的空间。如果有far函数,此空间被相应的占用,如果没有的化,此空间保留为0。 预处理命令#pragma语法 开发人员自己定义段的方法 #pragma CODE_SECTION(symbol,“section name”); 定义代码段 #pragma DATA_SECTION(symbol,“section name”); 定义数据段 #pragma是标准C语言的预处理命令,需要说明的是: 1,symbol是符号,可以使函数名或全局变量名,section name是自己定义的段名 2,CODE_SECTION用来定义代码段,DATA_SECTION用来定义数据段 3,不能再函数体内声明#pragma 4,必须在符号被定义和使用前使用#pragma 例7-1 #pragma DATA_SECTION(s,“newsect”); unsigned int s[100]; void main(void) { …… } 将全局数组变量s[100]单独编译成一个新的段, 取名为”newsect”。 段的存储特性 段 存储器类型 分配的存储空间 .text ROM OR RAM (FLASH) Page0 .cinit ROM OR RAM (FLASH) Page0 .const ROM OR RAM (FLASH) Page1 .econst ROM OR RAM (FLASH) Page1 .pinit ROM OR RAM (FLASH) Page0 .switch ROM OR RAM (FLASH) Page0/page1 .bss RAM Page1 .ebss RAM Page1 .stack RAM Page1 .system RAM Page1 .esystem RAM Page1 通过#pragma CODE_SECTION定义的段 ROM OR RAM (FLASH) Page0 通过#pragma DATA_SECTION定义的段 RAM Page1 7.3.3 CMD文件的编写 CMD文件支持C语言中的块注释符“/*”和“*/”,但不支持行注释符“//”。CMD文件会使用到为数不多的几个关键字,下面会根据需要来介绍一些常用的关键字。 CMD文件的两大主要功能是指示存储空间和分配段到存储空间 。 1.通过MEMORY伪指令来指示存储空间 MEMORY伪指令语法如下: MEMORY { PAGE0:name0[(attr)]:origin=constant,length=constant PAGEn:namen[(attr)]:origin=constant,length=constant } 2.通过SECTIONS伪指令来分配到存储空间 SECTIONS { name:[property,pro

文档评论(0)

33ggoup + 关注
文档贡献者

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

1亿VIP精品文档

相关文档