EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
C51存储器类型与51单片机的物理区域
, G0 d! u6 _5 A9 H1 ?7 G6 t$ `8 C% W0 J$ B# V! G% f1 U
% e$ I# @$ S8 o5 s# |. O- {1、 data区空间小,所以只有频繁用到或对运算速度要求很高的变量才放到data区内,比如for循环中的计数值。 2、 data区内最好放局部变量。 因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同; 扩展阅读:51单片机的特殊功能寄存器(SFR) 3、 确保你的程序中没有未调用的函数。 在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。这一点Keil C做得很愚蠢,但也没办法。 4、 程序中遇到的逻辑标志变量可以定义到bdata中,可以大大降低内存占用空间。 在51系列芯片中有16个字节位寻址区bdata,其中可以定义8*16=128个逻辑变量。定义方法是: bdata bit LedState;但位类型不能用在数组和结构体中。 5、 其他不频繁用到和对运算速度要求不高的变量都放到xdata区。 6、 如果想节省data空间就必须用large模式,将未定义内存位置的变量全放到xdata区。当然最好对所有变量都要指定内存类型。 7、 当使用到指针时,要指定指针指向的内存类型。在C51中未定义指向内存类型的通用指针占用3个字节;而指定指向data区的指针只占1个字节;指定指向xdata区的指针占2个字节。如指针p是指向data区,则应定义为: char data *p;。还可指定指针本身的存放内存类型,如:char data * xdata p;。其含义是指针p指向data区变量,而其本身存放在xdata区。 bit---是在内部数据存储空间中 20H .. 2FH 区域中一个位的地址,或者 8051 位可寻址 SFR 的一个位地址。 code---是在 0000H .. 0FFFFH 之间的一个代码地址。 data---是在 0 到 127 之间的一个数据存储器地址,或者在 128 .. 255 范围内的一个特殊功能寄存器(SFR)地址。 idata---是 0 to 255 范围内的一个 idata 存储器地址。 xdata 是 0 to 65535 范围内的一个 xdata 存储器地址。 指针类型和存储区的关系详解
' w6 P$ A- ~4 w |