C51中定义变量时如果省略存储器类型,Keil C51编译系统则会按编译模式SMALL、COMPACT和LARGE所规定的默认存储器类型去指定变量的存储区域,无论什么存储模式都可以声明变量在任何的8051存储区范围i,但是把最常用的命令如循环计数器和队列索引放在内部数据区可以显著地提高系统性能。以下介绍一下Keil编译选项Target中的Memory Model和Code Rom Size的设置。

Memory Model(存储器模式)

SMALL模式
  在本模式中所有的变量在缺省的情况下位于8051系统的内部数据区(这和用data存储类型标识符明确声明的一样,因此对这种变量的访问数据最快),在本模式中,变量访问非常有效,然而所有的东西包括堆栈必须放在内部RAM中,堆栈大小是不确定的,它取决于函数嵌套的深度。典型的,如果连接/定位器配置为内部数据区变量可覆盖,SMALL模式是最好的模式,但是SMALL模式的地址空间受限,在写小型的应用程序时,变量和数据放在Data内部数据存储器中是很好的,因为访问速度快,但在较大的程序中Data区最好只存放小的变量、数据或常用的变量(如循环计数、数据索引),而大的数据则放在别的存储区域,否则Data区就容易溢出。

COMPACT模式

  COMPACT模式把变量都定位在MCS-51系统的外部数据存储器中,外部数据存储段可有最多256字节(一页 ),这是对变量的访问是通过寄存器间接寻址(MOVX @Ri)进行的。采用这种编译模式时,变量的高8位地址由P2口确定,因此,在采用这种模式的同时,必须适当改变启动程序STARTUP.A51中的参数PDATASTART和PDATALEN,用L51进行连接时还必须采用连接控制命令PDATA来对P2口地址进行定位,这样才能确保P2口为所需的高8位地址。

LARGE模式

  LARGE模式中,所有函数和过程的变量以及局部变量数据段都被定义在51系统的外部数据存储器中,外部数据存储器最多可有64K,这要求用DPTR数据指针来间接地访问数据,因此,这种访问效率并不高,尤其是对2个或多个字节的变量,用这种模式访问数据程序的代码将会很大。

Code Rom Size(设置ROM空间的使用)

SMALL模式:只用低于2K的程序空间

COMPACT模式:单个函数的代码量不能超过2K,整个程序可以使用64K的程序空间

LARGE模式:可用全部64K空间

Keil中Memory Model和Code Rom Size说明的更多相关文章

  1. Keil中 Program Size: Code RO-data RW-data ZI-data

    一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘. 现在我们就一个STM32的工程为例子 linking... Program Size: ...

  2. Keil 中 Program Size: Code RO-data RW-data ZI-data 所代表的意思

    在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息: Program Size: Code=6320 RO-data=4864 RW-data=44 ZI-data ...

  3. keil中的memory model

    这两天仿真遇到的怪事真的是一大堆. 还是读写Flash的代码.keil编译OK,但是仿真就是莫名其妙地挂掉出现一些乱七八糟的事情. 后面发现是keil 中的memory model勾选错了,勾选的是l ...

  4. RW RO ZI ROM keil中的含义

    编译的一个ARM的程序,会得到这样的信息: ============================================================================== ...

  5. Keil中的code关键字

    一般说来,我们在C语言中定义的每一个变量初始化后都会占用一定的内存(RAM)空间.但是在keil中提供了一个特殊的关键字“code”,这个关键字在标准C中是没有的.其语法举例如下: unsigned ...

  6. 关于keil中data,idata,xdata,pdata,code的问题

    转自关于keil中data,idata,xdata,pdata,code的问题 ‍从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类 ...

  7. 内存模型 Memory model 内存分布及程序运行中(BSS段、数据段、代码段、堆栈

    C语言中内存分布及程序运行中(BSS段.数据段.代码段.堆栈) - 秦宝艳的个人页面 - 开源中国 https://my.oschina.net/pollybl1255/blog/140323 Mem ...

  8. 1、MVC和EF中的 Model First 和 Code First

    准备:先引入MVC和EF的dll包 *命令方法:打开工具——库程序包管理器——程序包管理器控制台,选择自己的项目 a)     Install-Package EntityFramework -Ver ...

  9. MVC和EF中的 Model First 和 Code First

    准备:先引入MVC和EF的dll包 *命令方法:打开工具——库程序包管理器——程序包管理器控制台,选择自己的项目 a)     Install-Package EntityFramework -Ver ...

随机推荐

  1. 《Programming WPF》翻译 第7章 4.转换

    原文:<Programming WPF>翻译 第7章 4.转换 支持高分辨率显示是WPF中的重要样式.这是被部分地支持--强调了可伸缩的向量图,而不是图像.但是,正如使用GDI+和GDI3 ...

  2. Resharper上手指南

    原文http://www.cnblogs.com/renji/archive/2007/12/11/resharper.html Resharper上手指南 我是visual studio的忠实用户, ...

  3. boost库使用:仿SGI-STL实现的一个树节点allocator

    ////////////////////////////////////////////////////////////////////////// //code by hzs //email: hu ...

  4. linux svn用法

    创建一个版本库.项目目录. 创建一个版本库: svnadmin create ~/SVNTestRepo 创建一个项目目录: svn mkdir file:///home/lsf/SVNTestRep ...

  5. log4net logfornet 配置和用法

    较好的参考地址: http://in3040.blog.163.com/blog/static/116702443201091354028744/ http://dev.tot.name/dotnet ...

  6. Jquery局部打印插件

    局部打印插件 jquery.PrintArea.js js代码 (function ($) {     var printAreaCount = 0;     $.fn.printArea = fun ...

  7. 安卓Menu键的问题

    近期开发中有须要Menu键,结果发现了一个非常尴尬的问题.我的測试机上有Menu键.可是測试平板上没有,队友的測试机上竟然也没有Menu键.这着实有些尴尬... 上网谷歌之后才发现问题所在: 仅仅有在 ...

  8. robots.txt网站爬虫文件设置

    目录: 什么是robots.txt robots.txt使用误区 robots.txt使用技巧 什么是robots.txt? robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.Robo ...

  9. 【COCOS2DX-对28游戏开发】 Cocos2d-x-3c 道路设计 CocosBase CocosNet CocosWidget

    原文链接:http://blog.csdn.net/cocosviva/article/details/18970717 另一个比較不错的cocos2dx扩展库:https://github.com/ ...

  10. Android防止内存泄漏以及MAT的使用

    Android发生内存泄漏最普遍的一种情况就是长期保持对Context,特别是Activity的引用,使得Activity无法被销毁.这也就意味着Activity中所有的成员变量也没办法销毁.本文仅介 ...