1、 通常情况下我们的代码量不大的话,没必要去关注RAM的空间,一旦全局变量多,以及代码量大,这种情况下我们就需要关注了。
我们的51系列单片机,使用keil编译器编译时,会发现下方会有三个参数大小,分别是Data,Xdata,Code。
以个人的理解,整体来说,单片机内部空间,可分为变量存储器和代码存储区,即SDRAM和Flash程序存储区。
即:SDRAM=idata+xdata
data为固定的最大128字节
idata=data+128=256(字节)
xdata则等于单片机规格所拥有的SDRAM-256(字节)
code=Flash程序存储区
所以,需要注意自己的全局变量存储位置,data 和xdata的存放是有不同定义的,个人理解是如果你的变量是需要高速动作的,你就存放于data空间,而某些不是经常使用的变量,你就可以放到xdata空间,例如我个人的一个案例:
我的一个PWM输出函数,是使用定时器生成的,而这个PWM是100Hz的频率,相当于我要给一个100us的定时器来做,那么这个定时器变量就要100us进行一次赋值,这个动作是非常快的,那么我就将这个变量放在了data空间,这样我的PWM的频率是比较准确的,如果我放在了xdata空间,两种情况:要么PWM无法生成,要么频率达不到100HZ左右。
#include "STC8.H"
#define uchar unsigned char
#define uint unsigned int
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;