变量存储——iRAM解析


//对于C51来说,内部RAM只有256Byte
//其中包括,低128Byte直接寻址的data和高128Byte间接寻址的idata(也包括SFR)
//data   定义的变量只能寻址低128Byte
//idata  定义的变量可以寻址整个iRAM
#define LEN 120 
data unsigned char tt1[LEN]; 
idata unsigned char tt2[127]; 
void main() 
{  
    unsigned char i,j;      
    for(i = 0;  i < LEN; ++i ) 
    { 
        j = i;          //注释掉这一行,编译器,无法优化变量j,就会将j放到RAM区域,从而会引发溢出错误
        tt1[j] = 0x55; 
    } 
} 

/***********************极限分配iRAM的例子************************/
/************************ [iRAM Space Map] ************************
              __________________________________________________
             | R0~R7  +   tt1   +   tt2   +   SP(at least)      |
             |                                                  |
             |  8B    +   120B  +   127B   +  1B =  256 Byte    |
             |__________________________________________________|

************************ [iRAM Space Map] ************************/
代码来源于网络,特发此与大家分享,感谢原作者!
posted @ 2014-10-25 10:23  _Fan_  阅读(498)  评论(0编辑  收藏  举报