打印

ARM调试问题!求助

[复制链接]
1545|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子砖家|  楼主 | 2009-10-2 22:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
运行环境:
JLINK,ADS1.2,AT91SAM7X128,在线仿真,小灯闪烁程序

调试开始:
程序运行,开始闪烁,运行几秒钟(大概5秒钟吧),程序跑飞,跳出while循环了,很奇怪,真是急死人。

ADS设置如下RO:0x0    RW:0x200000    Image Entry Point:  main  全速运行前进行了remap

一定是哪里设置出了问题,求大侠给分析一下。

程序超级简单:
int main(void)
{
     int  i;
     *(unsigned int *)0xFFFFFC10 = (unsigned int)1<<3;
     *(unsigned int *)0xFFFFF600 = (unsigned int)1<<19;
     *(unsigned int *)0xFFFFF610 = (unsigned int)1<<19;
     while(1)                     // 能进来,运行一会就出去了。
     {
          *(unsigned int *)0xFFFFF634 = (unsigned int)1<<19;
          for(i=0;i<100000;i++);
  
          *(unsigned int *)0xFFFFF630 = (unsigned int)1<<19;
          for(i=0;i<100000;i++);  
     }
}

相关帖子

沙发
gooogleman| | 2009-10-3 08:17 | 只看该作者
*((volatile UINT32 *)(addr)))

的方式比较好。楼主不加入volatile ,会有问题的。
你试试先吧。

使用特权

评论回复
板凳
电子砖家|  楼主 | 2009-10-3 09:33 | 只看该作者
谢谢楼上的朋友,按你的方法试了,还是不行!

纳闷了!!

使用特权

评论回复
地板
gooogleman| | 2009-10-3 09:42 | 只看该作者
你这样写代码
*(unsigned int *)0xFFFFF600 = (unsigned int)1<<19;
让人看起来不怎么好哦。
*(volatile  unsigned int *)0xFFFFF600 = (unsigned int)(1<<19);
——这样会不会好点,个人意见哦,


还有,你一直在while(1)里面做同一个动作吧。你让一个LED交替明亮,黑暗才好吧。我看的有点像,我没有弄过这个处理器说错了,请指教。

你可以在while(1)加入一句串口打印信息,看执行了多少次。

使用特权

评论回复
5
电子砖家|  楼主 | 2009-10-3 14:19 | 只看该作者
谢谢楼上耐心的回答。我按你写的方法改了,现象还是一样。
除了一开始描述的现象外,更一般的现象是

程序运行到while(1)中的第一个for(i=0;i<100000;i++);
等跳出来的时候自己就跑飞了,不能进入正确的函数入口。就是不能运行下一句话。

使用特权

评论回复
6
MakeBetter| | 2009-10-3 14:45 | 只看该作者
先别问这么多,看你堆栈设够了没有先。再就是你的FLASH是不是需要先设置的。
可以在你说的“飞”的地方加几条语句,看“飞”的地方是不是变了。是的话可以肯定不是你程序的问题。
调程序遇到死角时,不要老在几条语句上肯,想想还有别的可能造成此现象的原因没即可。

使用特权

评论回复
7
ciniao| | 2009-10-6 23:11 | 只看该作者
while(1)               
     {
          *(unsigned int *)0xFFFFF634 = (unsigned int)1<<19;
          for(i=0;i<100000;i++);
  
          *(unsigned int *)0xFFFFF630 = (unsigned int)1<<19;
          for(i=0;i<100000;i++);  
     }
你第一次设了两个io后,他们还会变么,到底是程序跑飞了还是其实它在运行而状态没变呢

使用特权

评论回复
8
lelee007| | 2009-10-7 12:48 | 只看该作者
检查堆栈设置,中断配置,还有中断的硬件状态

俺有一次不小心堆栈配置错了,结果程序死活进不了C程序,GNU下裸奔,折腾了两天也没注意到堆栈设置错了,两天后才意识到

GNU下的调试工具用的不熟练,有时不小心写错代码了,能把人搞疯的

使用特权

评论回复
9
电子砖家|  楼主 | 2009-10-9 13:53 | 只看该作者
谢谢大家,原来是没禁用看门狗。 <结贴>

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝