1 code 用来存储代码和常数,或者常数数组的,比如你程序定义的数组,如果不需要改动,即只是用来读取,不用赋值的,可以定义到code空间里,比如我们常用的7段数码管的显示数组,又或者NTC的表格,这些不需要改动,只用来读取的,定义到code里。
2 data空间:单片机内部RAM的低128B,特点是速度最快,因为采用的是直接寻址方式。
3 idata空间:单片机内弊穗部RAM的高128B,速度次快,采用的是与R0,R1配合的间接寻址方式
4 pdata空间:单片机外部RAM的前面的256B,速清李度与idata一样,采用的是与MOVX,R0,R1配合的间接寻址方式
5 xdata空间:单片机外部RAM的所有空间,包括前面的256B,即与pdata是有重合,采用的是与MOVX,DPTR配合的间接寻址方式,速度最慢
6 SFR空间:单片机的特殊功能寄存器空间,不能用来存放变量,只能是根据单片机的特点定义。
以上理论讲解完毕。
如果你用的是AT89C51单片机,且没有外租正卜部的RAM,那么,你只能把变量存放到data里,而idata,pdata,xdata都是没法用的,因为没有那么多物理空间,所以,即便你定义了,也是没用的。
可以有一个方法:我看你里面很多常数数组,可以把这些不需要改动的数组定义到code空间里去,而不占用RAM
这样还不行,你就只能是换单片机了,别无他法。
ARM体现的空漏即是斗睁烂精简指早搜令(Advanced RISC Machines),传统51单片机使用是较复杂的指令集,所以程序经过编译后一般会变小,虽然有采用精简指令集的C51,如STC12C系列,但80K的代码移植过去,256K的Flash肯定是够用的应该不会,我衡兆并写了一个咐迹小程序,程序如下:
#include"reg51.h"
void main()
{while(1)
}
编猜腔出来是1K
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)