keil里data字段被超出怎么办?

编译能通过,但是连接的时候出现error:segmentdoesnotfit。data=240,xdata=0,code=3329。将变量定义成xdata根本不能仿真,a... 编译能通过,但是连接的时候出现error:segment does not fit。 data=240,xdata=0,code=3329。将变量定义成xdata根本不能仿真,at89c51不是有256字节的ram吗?240的data怎么会超呢?求大侠指教啊 展开
 我来答
ghost4063
2012-05-14 · TA获得超过6519个赞
知道大有可为答主
回答量:2940
采纳率:75%
帮助的人:2736万
展开全部
89C51只有128字节的RAM,但其中很多地址被特殊寄存器占用了,另外,你的中断、函数调用还要使用的堆栈也要使用RAM,所以你实际使用的RAM也就是80个字节左右,如果函数嵌套多,那么可使用的RAM就更少了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4a635ee
2012-05-24 · TA获得超过206个赞
知道答主
回答量:47
采纳率:0%
帮助的人:62.5万
展开全部
楼主,C51的RAM大概是128B吧。xdata不行是没有6264。

一楼有些说的不对哦
89C51的RAM是00h-7Fh,SFR是80h-FFh,好像是分开的对吗。。
就算89C52,虽然RAM和SRF有相同的地址,但却是不同的物理空间,大概没有占用这回事吧。
详细的解答在这里 http://zhidao.baidu.com/question/193850592.html
所以说C51非常怪异,利用寻址方式来区别存储空间。

另外KEIL的设计师有点那个,KEIL使用递增堆栈,并且只为堆栈保留1个字节的区间。你不相信我的话就去看看那个后缀M51的文件。稍微有常识都明白这是不可以的啦,但这种1个字节类似BUG一样的分配策略使得,即使留给堆栈的RAM很少,也不会导致连接问题,常常是RUN-TIME的错误,比如堆栈溢出啦,程序不停的复位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式