智能车制作

标题: default isr报错 [打印本页]

作者: 刘林    时间: 2013-7-12 15:01
标题: default isr报错
就是程序运行着就进入了default isr了,请问用什么办法能获得错误的Vector的值吗?直接对VECTORNUM取值或取地址,都没法显示Vector的值,求解决方案,万分感谢

作者: 刘林    时间: 2013-7-12 15:15
PS:在Interrupt Log里面在错误的地方显示了 Unknown ID:166 还有150 的enter 和Leave但是查找Vector表对应的中断并不存在。。。。。。求大神解释

作者: 刘林    时间: 2013-7-12 15:20
刘林 发表于 2013-7-12 15:15
PS:在Interrupt Log里面在错误的地方显示了 Unknown ID:166 还有150 的enter 和Leave但是查找Vector表对应 ...

还莫名其妙的进入了DMACH2的中断,但是我用的是CH4de。。。。。各种不对不正常啊。。。。

作者: beandy    时间: 2013-7-12 22:09
如果用的火哥的库的话  可能是你的中断向量号写错了  比如说中断向量号应该写062 结果写为62 就会出现这样的问题
作者: 刘林    时间: 2013-7-13 10:41
beandy 发表于 2013-7-12 22:09
如果用的火哥的库的话  可能是你的中断向量号写错了  比如说中断向量号应该写062 结果写为62 就会出现这样的 ...

用的是火哥的库,但是仔细查了,没有发现类似于063写成63之类的情况。请问还有那些可能会导致这个问题吗?

作者: beandy    时间: 2013-7-13 11:04
以前我在调试的中断的时候 中断向量号写错了就这样
在isr.h中  
#undef  VECTOR_016
#define VECTOR_016    DMA_CH0_ISR           //DMA通道0中断
在实际调试的时候我写为
#undef  VECTOR_16
#define VECTOR_16    DMA_CH0_ISR           //DMA通道0中断


作者: beandy    时间: 2013-7-13 11:05
刘林 发表于 2013-7-13 10:41
用的是火哥的库,但是仔细查了,没有发现类似于063写成63之类的情况。请问还有那些可能会导致这个问题吗? ...

另外还有可能程序飞了也会这样  

作者: 刘林    时间: 2013-7-13 11:11
beandy 发表于 2013-7-13 11:05
另外还有可能程序飞了也会这样

看了下确实有一个标注为硬件上访的跑飞的变量,那么请问怎么解决跑飞。

作者: beandy    时间: 2013-7-13 11:33
刘林 发表于 2013-7-13 11:11
看了下确实有一个标注为硬件上访的跑飞的变量,那么请问怎么解决跑飞。

你还是看看我在6楼说的吧  出现这样的问题多半是因为中断向量号的错  很多人都错在这里 自己以为是对的 没有仔细检查 结果检查了很久 倒回来还是这个问题

从vectors.h中可以看出 你在isr.h里面的中断向量号写错了 那么程序就自动跳到default_isr这个中断函数中去。


作者: 刘林    时间: 2013-7-13 11:37
beandy 发表于 2013-7-13 11:33
你还是看看我在6楼说的吧  出现这样的问题多半是因为中断向量号的错  很多人都错在这里 自己以为是对的 没 ...

好的,谢谢你,我再仔细地再检查一遍

作者: 刘林    时间: 2013-7-13 18:01
beandy 发表于 2013-7-13 11:33
你还是看看我在6楼说的吧  出现这样的问题多半是因为中断向量号的错  很多人都错在这里 自己以为是对的 没 ...

isr.h现在改成这样了,但是问题还是没有解决:#undef  VECTOR_003
#define VECTOR_003    HardFault_Handler  
#undef  VECTOR_020
#define VECTOR_020    DMA_CH4_Handler
#undef  VECTOR_085
#define VECTOR_085    PIT1_IRQHandler   
#undef  VECTOR_106
#define VECTOR_106    PORTD_IRQHandler
extern void HardFault_Handler(void);   
extern void PIT1_IRQHandler();   
extern void PORTD_IRQHandler();      
extern void DMA_CH4_Handler(void);  
请问还有什么办法吗?


作者: beandy    时间: 2013-7-13 19:39
刘林 发表于 2013-7-13 18:01
isr.h现在改成这样了,但是问题还是没有解决:#undef  VECTOR_003
#define VECTOR_003    HardFault_Han ...

看你的中断写对了的呀 那你就看看是不是程序跑飞了  

作者: 刘林    时间: 2013-7-14 09:37
beandy 发表于 2013-7-13 19:39
看你的中断写对了的呀 那你就看看是不是程序跑飞了

估计可能是跑飞了吧,有几次提示the cpu is running 但是怎么解决呢?有人说可能是K60自身内部的有些东西没有清楚,请问可能吗?如果可能的话,怎么解决?

作者: beandy    时间: 2013-7-14 10:05
你加led灯来确定程序死在哪里吧  多用几个led灯就可以了
作者: 刘林    时间: 2013-7-14 10:24
beandy 发表于 2013-7-14 10:05
你加led灯来确定程序死在哪里吧  多用几个led灯就可以了

用代码debug时会在for循环的时候 ,watch窗口中i,j变量本来对应的是R4 R5和循环的值,到后面直接是命名错误。主程序不用循环没问题。小一点的循环加着也可以。但是当循环嵌套,搜索300*30的矩阵时就出问题。。。。。。不过这段代码之前放在紧接着while(1)的后面没什么问题。再加个类似的循环,就不对了。。。。。。。

作者: 刘林    时间: 2013-7-14 10:30
刘林 发表于 2013-7-14 10:24
用代码debug时会在for循环的时候 ,watch窗口中i,j变量本来对应的是R4 R5和循环的值,到后面直接是命名错 ...

好吧,都是假象,时间一长IAR崩溃了。。。。难道不能用循环?

作者: beandy    时间: 2013-7-14 11:39
刘林 发表于 2013-7-14 10:30
好吧,都是假象,时间一长IAR崩溃了。。。。难道不能用循环?

肯定可以呀 你要找到程序死在哪里 循环是可以的  另外你看看有没有溢出的情况 比如说数组只有20个 结果你的数组索引到了20 或者比20大 也会出问题的

作者: 阿灰    时间: 2014-5-14 22:12
蛋疼啊,用野火K60 车子跑着跑着也开始报错 Hard Fault !  这个现象是随机的,车子有的时候就突然程序跑飞了!有人说  极可能是数组越界!现在我的图像处理程序俨然已经成型,上下600多行吧,该怎么检查!  有人支招 告诉我怎么检查出来吗?应为是随机的 根本不知道实在那种情况下发的错误,debug时,可能又都正常,

作者: SheldonZhang    时间: 2014-7-7 20:49
阿灰 发表于 2014-5-14 22:12
蛋疼啊,用野火K60 车子跑着跑着也开始报错 Hard Fault !  这个现象是随机的,车子有的时候就突然程序跑飞了 ...

我的情况和你一样,不知道有没有解决方法

作者: 阿灰    时间: 2014-7-10 21:08
SheldonZhang 发表于 2014-7-7 20:49
我的情况和你一样,不知道有没有解决方法

我们 换了芯片,程序做了改动!自己就不发了!




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2