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怎么会超呢?求大侠指教啊
展开
展开全部
89C51只有128字节的RAM,但其中很多地址被特殊寄存器占用了,另外,你的中断、函数调用还要使用的堆栈也要使用RAM,所以你实际使用的RAM也就是80个字节左右,如果函数嵌套多,那么可使用的RAM就更少了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主,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的错误,比如堆栈溢出啦,程序不停的复位。
一楼有些说的不对哦
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的错误,比如堆栈溢出啦,程序不停的复位。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询