leiyin 发表于 2014-11-20 18:36:03

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

本帖最后由 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之类的内容,这里就不赘述了,但是对上述现象还是很迷糊,理不出思路
不知大家是不是遇到过同样的情况,帮忙解释一下这种现象的原因!

leiyin 发表于 2014-11-20 18:49:35

补充:因为程序作用主要是串口通信,上述现象用keil软件仿真都是正常运行的,只有下载到单片上,才会出问题

leiyin 发表于 2014-11-20 18:50:02

补充:因为程序作用主要是串口通信,上述现象用keil软件仿真都是正常运行的,只有下载到单片上,才会出问题

four_zhg 发表于 2014-11-20 19:22:22

你这个是明显是单片机的外部存储器不够造成的。查看一下单片机的PDF文档,看一下它的xdata是多少就知道了。

leiyin 发表于 2014-11-20 20:04:26

本帖最后由 leiyin 于 2014-11-20 20:10 编辑

lu1987 发表于 2014-11-20 20:11:46

xdata是指使用DPTR访问的RAM,data是指到0x7F的128字节的RAM 能直接寻址...

leiyin 发表于 2014-11-20 20:18:27

lu1987 发表于 2014-11-20 20:11
xdata是指使用DPTR访问的RAM,data是指到0x7F的128字节的RAM 能直接寻址...

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

lu1987 发表于 2014-11-20 20:40:38

stc的datasheet里面写了SRAM是1280 超出这个范围无效吧 编译时候没提出超出范围或许默认是用了外扩RAM?

leiyin 发表于 2014-11-20 22:11:12

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

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

shi_90 发表于 2014-11-21 13:39:14

我也遇到过这种现象。但是最后也没有直接解决,换了另一条道路!把xdata尽量少用。

tangnyzl 发表于 2014-11-21 20:42:05

很久没有用 51了 是不是该用 idata

nhztb 发表于 2014-11-21 21:48:26

leiyin 发表于 2014-11-20 20:04


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

lu1987 发表于 2014-11-23 18:58:20

leiyin 发表于 2014-11-20 22:11
上边两种情况下,都没有超过1280字节啊

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

bobo89 发表于 2014-11-23 19:22:21

帮顶一下!

广轻电气091 发表于 2014-11-23 21:46:35

栈呢?可能栈溢出了,把你的局部数组放到函数外面试试
页: [1]
查看完整版本: 51单片机 data xdada影响程序运行现象