之前有朋友老是出现RAM地址溢出,但他自己不知道是什么问题,因为他用的51是512的RAM,但他才不到400字节的,总是想不明白为什么不够用,这里说一下,其实是他的定义类型不对,他把所有变量定义成了DATA,才会导致这样。为什么呢?看看下面就知道了
data:
固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。
idata:
固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式 访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)
xdata:
外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。
不知道大家现在明白了没?超过256字节的就属于外部RAM了。有人说但我也没用外部RAM,手册里写的也是单片机本身就是512RAM,为什么是外部?其实超过256字节的RAM都是用技术集成在单片机里的,不是真正的内部RAM,必须要定义为XDATA才可以用。
用户71098 2008-1-29 09:18