为什么数组内容被改写了?

[复制链接]
8022|44
 楼主| zxb1717 发表于 2008-6-18 12:59 | 显示全部楼层 |阅读模式
我的程序:
BYTE  xdata data_Table[512]= 
{ 1,2,.........
...................
510,512

};

...........

void main(void)
{
  .........  
   for(i =0;i<512;i++)
         dispaly(data_Table);//发现此处数组里的数据被改写了

    while(1)
    {
     ............
    }
}

请问路过的大侠有可能是什么原因导致这种现象的,谢谢!
computer00 发表于 2008-6-18 13:15 | 显示全部楼层

变成什么样了?也许你的XRAM不行?

 楼主| zxb1717 发表于 2008-6-18 13:19 | 显示全部楼层

TO:computer00

我原来数组里的第一个元素值是1,结果被改成8了,而且第一个元素你无论改成多少,都被改写为8了,请computer00版主给个建议吧,谢谢!
 楼主| zxb1717 发表于 2008-6-18 13:21 | 显示全部楼层

被改写的元素在固定的地方

被改写的数组元素在固定的地方,而且被改写后的值始终是一样的,真奇怪
 楼主| zxb1717 发表于 2008-6-18 13:23 | 显示全部楼层

我的CYPRESS单片机,51内核的

 楼主| zxb1717 发表于 2008-6-18 13:46 | 显示全部楼层

TO:computer00大侠

能给我一个建议吗,估计哪里会出问题?
李冬发 发表于 2008-6-18 14:01 | 显示全部楼层

后半部份的数据也被改写了吧

 楼主| zxb1717 发表于 2008-6-18 14:06 | 显示全部楼层

TO:李冬发

我总共发512字节的数据,只在固定的三个字节上被改写了,其他地方没有改写,而且改写后的值不随你发送值的变化而变化。
 楼主| zxb1717 发表于 2008-6-18 14:26 | 显示全部楼层

会不会是keil编译器的设置问题啊?

会不会是keil编译器的设置问题啊?
computer00 发表于 2008-6-18 14:53 | 显示全部楼层

那就搞不清楚了……软仿真看看怎样。

huntington 发表于 2008-6-18 15:00 | 显示全部楼层

反汇编看看~~~

t.jm 发表于 2008-6-18 15:35 | 显示全部楼层

可能是dispaly函数的问题.

ayb_ice 发表于 2008-6-18 15:36 | 显示全部楼层

从这里根本看不出来

调试一步步看吧
 楼主| zxb1717 发表于 2008-6-18 15:43 | 显示全部楼层

谢谢大家关注

TO:t.jm,可以排除display函数的问题。

只要一进入主函数后再去读数组的值就已经改变了,应该是数据空间分配的问题,但不知道怎么设置keil
 楼主| zxb1717 发表于 2008-6-18 16:16 | 显示全部楼层

startup.a51中关于xdata设置

请问大侠们,以下设置是startup.a51中关于xdata设置,需要修改吗?
;------------------------------------------------------------------------------
;
;  User-defined Power-On Initialization of Memory
;
;  With the following EQU statements the initialization of memory
;  at processor reset can be defined:
;
;               ; the absolute start-address of IDATA memory is always 0
IDATALEN        EQU     80H     ; the length of IDATA memory in bytes.
;
XDATASTART      EQU     0H      ; the absolute start-address of XDATA memory
XDATALEN        EQU     0H      ; the length of XDATA memory in bytes.
;
PDATASTART      EQU     0H      ; the absolute start-address of PDATA memory
PDATALEN        EQU     0H      ; the length of PDATA memory in bytes.
ayb_ice 发表于 2008-6-18 16:52 | 显示全部楼层

startup.a51中只是清零动作

 楼主| zxb1717 发表于 2008-6-18 17:36 | 显示全部楼层

这些选项需要设置吗

谁精通keil的,请问这个界面需要设置吗,谢谢了
 楼主| zxb1717 发表于 2008-6-18 18:02 | 显示全部楼层

解决了!

那个问题解决了,呵呵,只要给这个大数组定义为绝对地址变量就可以了,这样数组中的值就不会被改写,我估计一开始可能是地址发生冲突了
wushuang_z 发表于 2008-6-18 18:44 | 显示全部楼层

有道理

应该是地址冲突的问题
ayb_ice 发表于 2008-6-18 19:44 | 显示全部楼层

这种情况使能使用片上XRAM即可

谁知道你用的是这种MCU呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

231

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部