由于写的c51程序超出了128B,没有外部存储的设备,现想用idata,请教idata使用,附程序

由于写的c51程序超出了128B,没有外部存储的设备,现想用idata,请教idata使用,附程序,第1张

单片机C语言里以下几种存储空间

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12511994.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存