访问电脑版页面

导航:老古开发网手机版51单片机51单片机Keil C51编程

Keil中Memory Model和Code Rom Size说明

导读: C51中定义变量时如果省略存储器类型,Keil C51编译系统则会按编译模式SMALL、COMPACT和LARGE所规定的默认存储器类型去指定变量的存储区域,无论什么存储模式都可以声明变量在任何的8051存储区范围i,但是把最常用
关键字:
code,keil,memory,model,rom,size,

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空间


来源:互联网   作者:karen  2018/10/26 18:40:01
栏目: [ 51单片机Keil C51编程]

相关阅读

几种码制转换 BCD TO HEX,HEX TO BCD ,BIN TO HEX

让Ultra Edit和Keil结合的更紧密

在Keil c51调试中,如何查看外部存储器XDATA?

在KEIL C51上仿真完了,怎样生成HEX文件去烧写??

Keil C51中如何实现代码优化?

C51中 INT 转换为 2个CHAR?

Keil C51编译错误总结

proteus与keil的完美结合(没有开发板,让你也学的爽!)

C51 的重入问题 WARNING L15: MULTIPLE CALL TO SEGMENT(转)

[转载]C51中断处理过程

那位大虾能告诉我C51 的printf()函数有什么用?

keil 7.0编译出现:error C316: unterminated conditionals

51单片机CO2检测显示程序解析

在Keil c51调试中,如何查看特殊寄存器?

Keil C51单片机中变量的使用方法解析

volatile的用法

在Keil c51调试中,如何查看全部256bytes的内部RAM?

MCS51单片机程序设计时堆栈的计算方法解析

SBUF=0x65,c=SBUF结果为c=0???

keil C51 怎样把修改的startup.a51 加到工程文件中