登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

gcc求助,请各位网友给分析一下原因

作者:GD_liu 栏目:单片机
gcc求助,请各位网友给分析一下原因
原来用CV,盗版,总觉得不是理直气壮,后来听说GCC不错,而且免费,最重要的是版主和各位高手都用他,所以花了一个星期将原来写的东西改为GCC编译,现在完成了第一个,但遇到了下面莫明其妙的问题:
我定义了一个发送数组,TxBuffer[13],前8位为固定标识符,第一位TxBuffer[0]为0x68
我定义了一个接收数组,Rx[20][32],为采集二十个点的数据,每个点32个数据
将发送数组发送,采集点不响应,赋值Rx[i][0](此为通讯标识)为0x41,当i=16(采集点地址)时再将发送数组发送,发送数组第一位TxBuffer[0]的值变成了0x41
我试了各种优化选项,都是这样。
查看汇编文件,我的TxBuffer[0]的地址为0x030E,而Rx[16][0]的地址为0x028E,没有重叠,而最后那条汇编指令为:STD Z+0,R24
R24中的数为0x41,而Z的值当时也为0x028E,执行过该条指令后0x30E(即TxBuffer[0])的内容变成了0x41,这是怎么回事?查了半天了,请给予帮助

2楼: >>参与讨论
mxh0506
有可能是操作时过界了
0x028E + 4*32d = 0x030E
可见两个组数是紧邻的,如果操作时控制长度有误会覆盖后面的数组。
还有就是硬件的原因了,特别是用了外部RAM时,查查A7/A8有没有短路

3楼: >>参与讨论
GD_liu
感谢上面的朋友,不过
Rx[0][0]的地址为0xAE,0xae + 20*32 = 0x030E,说明分配的RAM空间是紧邻的,但还是够的,不知道编译器怎么会这样分配RAM。
我采用的是HM6264外扩了8KRAM,单片机为8515
用AVRStudio的MEMORY窗口查看,只能看到最大地址为0x25f,往后的地址就看不到了,这是怎么回事?当i=16时正好到了地址0x25f + 32(我认为这里有问题)
用Watch窗口查看ucRx,刚开始运行时地址是顺序排列的(可以看到),运行到i=16时,再查看地址,ucRx[16]的地址成了0x118E了,而刚开始时为0x028E,正好为0x25f + 32的地址
请朋友帮忙分析一下
在此谢过

4楼: >>参与讨论
GD_liu
还有个奇怪的现象
在Extented RAM窗口中,我修改任意一位地址,如xxxE,则所有的以E结尾的地址都改变

5楼: >>参与讨论
mxh0506
应该是总线或RAM芯片的问题
 
6楼: >>参与讨论
GD_liu
换了好几片RAM都是这样
 
7楼: >>参与讨论
GD_liu
现在可以肯定是外部RAM的问题
我不知道是程序问题还是硬件电路问题,把HM6264拔下和插上在Extend RAM窗口中显示的内容是一样的,我怀疑是硬件电路有问题,我查了一下没发现有什么异常,网友给看一下

参与讨论
昵称:
讨论内容:
 
 
相关帖子
WinAVR-20030913-bin-install.exe怎么用啊?
复位求助!!
请问各位高手,哪里能买到便宜点的JTAG ICE ?
有哪位高手告诉我6B595与2003芯片之间如何联接
情各位介绍一本学习AVR的好书.xiexie!
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号