[C51内存分配优化.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  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文档。上传文档
查看更多
[C51内存分配优化

C51的内存分配不同于一般的PC,内存空间有限,采用覆盖和共享技术。在Keil编译器中,经过编译后,会形成一个M51文件,在其内部可以详细的看到内存的分配情况。 C51内存常见的两个误区: (1)?????? 变量超过128字节后必须用COMPACT模式。 其实,只要不超过256字节,都可以用SMALL模式 (2)?????? 内部RAM,128字节以上的是SFR用,不给程序用。 其实,由于C51寻址的不同,高128字节也可以用来存储变量,虽与SFR地址相同,但寻址的方式不同。 下面通过几个程序来看内存的分配。 ******************************************************************************* //程序1: #include reg51.h void main() {} Program Size: data=9.0 xdata=0 code=16 TYPE??? BASE????? LENGTH??? RELOCATION?? SEGMENT NAME ??????????? ----------------------------------------------------- ? ??????????? * * * * * * *?? D A T A?? M E M O R Y?? * * * * * * * ??????????? REG???? 0000H???? 0008H???? ABSOLUTE???? REG BANK 0 ??????????? IDATA?? 0008H???? 0001H???? UNIT???????? ?STACK ? ******************************************************************************* 从上面可以看到,即使程序内部无任何变量和函数data也会为9.0。这9个字节内存分别为R0-R8和一个堆栈指针(C51的堆栈是“grow up”,即使堆栈中没有内容,也会有一个栈底指针)。data区中由于R0-R8占有8个存储空间,因此data区最大为120字节(栈在所有的变量空间之后),如果超过120个字节则由idata显式的指定为间接寻址。对于整个内部256字节的RAM,在极端的情况下,最大的变量为247字节。 ? 当定义全局变量时 ******************************************************************************* //程序2: #includereg51.h #define uint unsigned int #define uchar unsigned char uchar a; uint b; void main() {} Program Size: data=12.0 xdata=0 code=16 TYPE??? BASE????? LENGTH??? RELOCATION?? SEGMENT NAME ?????? ?????----------------------------------------------------- ? ??????????? * * * * * * *?? D A T A?? M E M O R Y?? * * * * * * * ??????????? REG???? 0000H???? 0008H???? ABSOLUTE???? REG BANK 0 ??????????? DATA??? 0008H???? 0003H???? UNIT???????? ?DT?MAIN ? ??????????IDATA?? 000BH???? 0001H???? UNIT???????? ?STACK ? ??????????? * * * * * * *?? C O D E?? M E M O R Y?? * * * * * * * ??????????? CODE??? 0000H???? 0003H???? ABSOLUTE???? ??????????? CODE??? 0003H???? 000CH???? UNIT???????? ?C_C51STARTUP ????????? ??CODE??? 000FH???? 0001H???? UNIT???????? ?PR?MAIN?MAIN ******************************************************************************* 存在全局变量时,根据全局变量的类型分配相应的存储空间。 看下

文档评论(0)

xiayutian80 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档