存储器类型
C51编译器支持8051及其派生器件结构并提供对8051所有存储区的访问。每个变量可以明确地分配到指定存储空间。对内部数据存储器的访问比对外部数据的访问快许多。因此,应当将频繁使用的变量放在内部存储器,而把较少使用的变量放在外部存储器中。
变量的定义包括了存储器类型的指定,可以指定变量存放的位置。
存储器类型 | 描述 |
---|---|
code | 程序存储器(64K字节);通过操作码MOVC @A+DPTR进行访问 |
data | 直接寻址内部数据存储器;对变量的最快访问(128字节) |
idata | 间接寻址内部数据存储器;访问整个内部地址空间(256字节) |
bdata | 位寻址内部数据存储器;允许位和字节混合寻址(16字节) |
xdata | 外部数据存储器(64K字节);通过MOVX @DPTR 访问 |
pdata | 页外部数据存储器(256字节);通过MOVX @Rn访问 |
存储器模型
存储器模型决定用于函数自变量、自动变量和没有明确存储类型的变量的默认存储器类型。在命令行中使用SMALL、COMPACT和LARGE控制命令指定存储器类型。
SMALL
在该模型中,所有变量都默认位于8051内部数据存储器。这和使用data指定存储器类型的方式一样。此模型对于变量访问的效率很高,弹所有的数据对象和堆栈必须适合内部RAM。堆栈的大小很关键。因为使用的堆栈空间是由不同函数嵌套的深度决定的。通常,如果BL51连接器/定位器都将变量都配置在内部数据存储器内,SMALL模型是最佳选择。
COMPACT
使用COMPACT模型,所有变量都默认在外部数据存储器的一页内。这和使用pdata指定存储器类型一样。该存储器类型适用于变量不超过256个字节。此限制是由寻址方式所决定的。该存储器类型的效率低于SMALL模型。对变量的访问速度要慢一些,但比LARGE模型快。地址的高字节通常通过口2设置。编译器没有设置该口。
LARGE
在LARGE模型中,所有变量都默认位于外部数据存储器。这个使用xdata指定存储器类型一样。使用数据指针(DPTR)进行寻址。通过数据指针访问外部数据存储器的效率较低。特别是当变量为2个字节或更多字节时,该模型的数据访问比SMALL和COMPACT产生更多的代码。