搜档网
当前位置:搜档网 › 如何将51单片机进行内存优化

如何将51单片机进行内存优化

如何将51单片机进行内存优化

如何将51单片机进行内存优化

对51单片机内存的认识,很多人有误解,最常见的是以下两种

①超过变量128后必须使用compact模式编译

实际的情况是只要内存占用量不超过256.0 就可以用small 模式编译

②128以上的某些地址为特殊寄存器使用,不能给程序用

与PC机不同,51单片机不使用线性编址,特殊寄存器与RAM 使用重复的重复的地址。但访问时采用不同的指令,所以并不会占用RAM 空间。

由于内存比较小,一般要进行内存优化,尽量提高内存的使用效率。

以Keil C 编译器为例,small 模式下未指存储类型的变量默认为data型,即直接寻址,只能访问低128 个字节,但这128 个字节也不是全为我们的程序所用,寄存器R0-R7必须映射到低RAM,要占去8 个字节,如果使用寄存组切换,占用的更多。

所以可以使用data 区最大为120 字节,超出120 个字节则必须用idata 显式的指定为间接寻址,另外堆栈至少要占用一个字节,所以极限情况下可以定义的变量可占247 个字节。当然,实际应用中堆栈为一个字节肯定是不够用的,但如果嵌套调用层数不深,有十几个字节也够有了。

为了验上面的观点,写了个例子

#define LEN 120

data UCHAR tt1[LEN];

idata UCHAR tt2[127];

void main()

{

UCHAR i,j;

for(i = 0; i 《LEN; ++i )

{

j = i;

tt1[j]= 0x55;

相关主题