搜索
bottom↓
回复: 14

51单片机 data xdada影响程序运行现象

[复制链接]

出0入0汤圆

发表于 2014-11-20 18:36:03 | 显示全部楼层 |阅读模式
本帖最后由 leiyin 于 2014-11-20 18:39 编辑

使用的芯片是STC11F32XE,编译器是keil4
调试程序式无意中发现一个,将编译设置成small:variables in DATA时,如下图:


通过一个子函数里的局部变量数组个数来改变XDATA的个数,

发现放XDATA个数大于118之后,程序编译不会出错,但是下载到
单片机中之后,程序无法正常运行,编译信息如下图所示:


将编译器设置成 Large:variables in XDATA时,如下图:

还是通过上面变量改变XDATA的个数,发现当XDATA个数大于1021之后,
下载到单片机中,程序就无法正常运行了,编译信息如下:


网上查了一些 DATA ,XDATA,PDATA之类的内容,这里就不赘述了,但是对上述现象还是很迷糊,理不出思路
不知大家是不是遇到过同样的情况,帮忙解释一下这种现象的原因!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2014-11-20 18:49:35 | 显示全部楼层
补充:因为程序作用主要是串口通信,上述现象用keil软件仿真都是正常运行的,只有下载到单片上,才会出问题

出0入0汤圆

 楼主| 发表于 2014-11-20 18:50:02 | 显示全部楼层
补充:因为程序作用主要是串口通信,上述现象用keil软件仿真都是正常运行的,只有下载到单片上,才会出问题

出0入0汤圆

发表于 2014-11-20 19:22:22 | 显示全部楼层
你这个是明显是单片机的外部存储器不够造成的。查看一下单片机的PDF文档,看一下它的xdata是多少就知道了。

出0入0汤圆

 楼主| 发表于 2014-11-20 20:04:26 | 显示全部楼层
本帖最后由 leiyin 于 2014-11-20 20:10 编辑

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-11-20 20:11:46 | 显示全部楼层
xdata是指使用DPTR访问的RAM,data是指到0x7F的128字节的RAM 能直接寻址...

出0入0汤圆

 楼主| 发表于 2014-11-20 20:18:27 | 显示全部楼层
lu1987 发表于 2014-11-20 20:11
xdata是指使用DPTR访问的RAM,data是指到0x7F的128字节的RAM 能直接寻址...

所以上面出现现象的原因能解释下吗

出0入0汤圆

发表于 2014-11-20 20:40:38 | 显示全部楼层
stc的datasheet里面写了SRAM是1280 超出这个范围无效吧 编译时候没提出超出范围或许默认是用了外扩RAM?

出0入0汤圆

 楼主| 发表于 2014-11-20 22:11:12 | 显示全部楼层
lu1987 发表于 2014-11-20 20:40
stc的datasheet里面写了SRAM是1280 超出这个范围无效吧 编译时候没提出超出范围或许默认是用了外扩RAM? ...

上边两种情况下,都没有超过1280字节啊

出0入0汤圆

发表于 2014-11-21 13:39:14 | 显示全部楼层
我也遇到过这种现象。但是最后也没有直接解决,换了另一条道路!把xdata尽量少用。

出0入0汤圆

发表于 2014-11-21 20:42:05 | 显示全部楼层
很久没有用 51了 是不是该用 idata

出0入0汤圆

发表于 2014-11-21 21:48:26 | 显示全部楼层

你要查下XDATA具体是多少,看总字节是不行的。
要保证程序的XDATA不超过单片机的XDATA

出0入0汤圆

发表于 2014-11-23 18:58:20 来自手机 | 显示全部楼层
leiyin 发表于 2014-11-20 22:11
上边两种情况下,都没有超过1280字节啊

我之前用过stc的片子,编译只要选择large模式就运行不了,哪怕只有一句代码。stc的总有莫名地方……你换片试试,

出0入0汤圆

发表于 2014-11-23 19:22:21 | 显示全部楼层
帮顶一下!

出0入0汤圆

发表于 2014-11-23 21:46:35 | 显示全部楼层
栈呢?可能栈溢出了,把你的局部数组放到函数外面试试
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 00:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表