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之类的内容,这里就不赘述了,但是对上述现象还是很迷糊,理不出思路
不知大家是不是遇到过同样的情况,帮忙解释一下这种现象的原因!
补充:因为程序作用主要是串口通信,上述现象用keil软件仿真都是正常运行的,只有下载到单片上,才会出问题 补充:因为程序作用主要是串口通信,上述现象用keil软件仿真都是正常运行的,只有下载到单片上,才会出问题 你这个是明显是单片机的外部存储器不够造成的。查看一下单片机的PDF文档,看一下它的xdata是多少就知道了。 本帖最后由 leiyin 于 2014-11-20 20:10 编辑
xdata是指使用DPTR访问的RAM,data是指到0x7F的128字节的RAM 能直接寻址... lu1987 发表于 2014-11-20 20:11
xdata是指使用DPTR访问的RAM,data是指到0x7F的128字节的RAM 能直接寻址...
所以上面出现现象的原因能解释下吗 stc的datasheet里面写了SRAM是1280 超出这个范围无效吧 编译时候没提出超出范围或许默认是用了外扩RAM? lu1987 发表于 2014-11-20 20:40
stc的datasheet里面写了SRAM是1280 超出这个范围无效吧 编译时候没提出超出范围或许默认是用了外扩RAM? ...
上边两种情况下,都没有超过1280字节啊 我也遇到过这种现象。但是最后也没有直接解决,换了另一条道路!把xdata尽量少用。 很久没有用 51了 是不是该用 idata
leiyin 发表于 2014-11-20 20:04
你要查下XDATA具体是多少,看总字节是不行的。
要保证程序的XDATA不超过单片机的XDATA
leiyin 发表于 2014-11-20 22:11
上边两种情况下,都没有超过1280字节啊
我之前用过stc的片子,编译只要选择large模式就运行不了,哪怕只有一句代码。stc的总有莫名地方……你换片试试, 帮顶一下! 栈呢?可能栈溢出了,把你的局部数组放到函数外面试试
页:
[1]