打印

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

[复制链接]
6120|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 | 只看该作者

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

被改写的数组元素在固定的地方,而且被改写后的值始终是一样的,真奇怪

使用特权

评论回复
5
zxb1717|  楼主 | 2008-6-18 13:23 | 只看该作者

我的CYPRESS单片机,51内核的

使用特权

评论回复
6
zxb1717|  楼主 | 2008-6-18 13:46 | 只看该作者

TO:computer00大侠

能给我一个建议吗,估计哪里会出问题?

使用特权

评论回复
7
李冬发| | 2008-6-18 14:01 | 只看该作者

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

使用特权

评论回复
8
zxb1717|  楼主 | 2008-6-18 14:06 | 只看该作者

TO:李冬发

我总共发512字节的数据,只在固定的三个字节上被改写了,其他地方没有改写,而且改写后的值不随你发送值的变化而变化。

使用特权

评论回复
9
zxb1717|  楼主 | 2008-6-18 14:26 | 只看该作者

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

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

使用特权

评论回复
10
computer00| | 2008-6-18 14:53 | 只看该作者

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

使用特权

评论回复
11
huntington| | 2008-6-18 15:00 | 只看该作者

反汇编看看~~~

使用特权

评论回复
12
t.jm| | 2008-6-18 15:35 | 只看该作者

可能是dispaly函数的问题.

使用特权

评论回复
13
ayb_ice| | 2008-6-18 15:36 | 只看该作者

从这里根本看不出来

调试一步步看吧

使用特权

评论回复
14
zxb1717|  楼主 | 2008-6-18 15:43 | 只看该作者

谢谢大家关注

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

只要一进入主函数后再去读数组的值就已经改变了,应该是数据空间分配的问题,但不知道怎么设置keil

使用特权

评论回复
15
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.

使用特权

评论回复
16
ayb_ice| | 2008-6-18 16:52 | 只看该作者

startup.a51中只是清零动作

使用特权

评论回复
17
zxb1717|  楼主 | 2008-6-18 17:36 | 只看该作者

这些选项需要设置吗

谁精通keil的,请问这个界面需要设置吗,谢谢了

使用特权

评论回复
18
zxb1717|  楼主 | 2008-6-18 18:02 | 只看该作者

解决了!

那个问题解决了,呵呵,只要给这个大数组定义为绝对地址变量就可以了,这样数组中的值就不会被改写,我估计一开始可能是地址发生冲突了

使用特权

评论回复
19
wushuang_z| | 2008-6-18 18:44 | 只看该作者

有道理

应该是地址冲突的问题

使用特权

评论回复
20
ayb_ice| | 2008-6-18 19:44 | 只看该作者

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

谁知道你用的是这种MCU呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

231

帖子

1

粉丝