data 应该是放在ram中吧 有个相关问题求教

[复制链接]
2573|7
 楼主| Autine 发表于 2007-6-15 14:54 | 显示全部楼层 |阅读模式
原本是用89c4051 来写来着
结果 定义的全局变量太多了  主要有个uint8 SAVE[96];(实在压不掉)
编译一看 data=170.1   89c4051的ram是128的,自然放不下,于是在Device里把芯片改为 89s52 ram为256,但还是提示 如图

请教全局变量编译后 该是在ram中吧 ???
为什么使用89s52不行呢??
或者 是别的什么问题 求教!!
农民讲习所 发表于 2007-6-15 15:18 | 显示全部楼层

uint8 SAVE[96]; -> uint8 idata SAVE[96];(

农民讲习所 发表于 2007-6-15 15:21 | 显示全部楼层

数组是指针性质的

数组是指针性质的,用idata描述是合适的。而且高128RAM是idata指针访问的。
gyt 发表于 2007-6-15 15:25 | 显示全部楼层

高!

这样就放到高地址部分去了。
 楼主| Autine 发表于 2007-6-15 16:04 | 显示全部楼层

谢谢 谢谢

我试了 uint8 data SAVE[96]; 不行  晕的要死不知道该怎么办

看了半天 
data  定义在片内数据存储区(00H~FFH)
bdata  定义在片内数据存储区(20H~2FH)
idata  定义在片内数据存储区,只能间接寻址

另 在small模式下  默认存储类型为data  最大128    

那么就是说 在small模式下 我们使用89s52 data超了128  它也不会自动用128~255区间存储,  只能自己把变量定义到128~255区间???

gyt 发表于 2007-6-15 16:08 | 显示全部楼层
 楼主| Autine 发表于 2007-6-15 16:21 | 显示全部楼层

又仔细看了下

谢谢各位的回复
找了本c51的书看看了
data  还是 00H~FFH   但从80H 开始被SFR占了   所以剩下128了 
而诸如 89s4051的256的ram  是00H~180H  为了兼容其中80H~FFH 是SFR  剩下256的用户RAM   可以这样理解吗???
ayb_ice 发表于 2007-6-15 18:27 | 显示全部楼层

看清楚了uint8 idata SAVE[96];

您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

64

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0