打印

程序进入FaultISR最后BFAR=0xE3000029

[复制链接]
楼主: zxb1717
手机看帖
扫描二维码
随时随地手机跟帖
21
李富贵| | 2012-2-23 15:06 | 只看该作者 回帖奖励 |倒序浏览
gcc我用过yagarto,还行,这是个免费软件。
http://www.yagarto.de/

mdk下载地址我发短消息给你。

使用特权

评论回复
22
zxb1717|  楼主 | 2012-2-23 15:37 | 只看该作者
李大侠真是好人,这么耐心详细从头到尾指导,能遇到你这样的一个上司就幸福了,感谢万分!

使用特权

评论回复
23
zxb1717|  楼主 | 2012-2-23 15:51 | 只看该作者
按指定的密码登录后,上面的文件下不了也打不开,不过还是十分感谢,我先用IAR调着,换了GCC或MDK万一又有新问题呢,呵呵。至少现在能定位错误的地址了,虽然还看不出什么,至少也向前走了一步,我自己再琢磨琢磨,有问题再向你及各位在线高手请教!

使用特权

评论回复
24
zljack213| | 2012-2-23 15:59 | 只看该作者
路过

使用特权

评论回复
25
zljack213| | 2012-2-23 16:00 | 只看该作者
ding

使用特权

评论回复
26
zxb1717|  楼主 | 2012-2-23 16:44 | 只看该作者
原来程序的中断函数中用了10个静态局部变量,自从把中断函数里面几个静态局部变量屏蔽了以后,这两天还没出过错,难道会跟这个有关??

使用特权

评论回复
27
icecut| | 2012-2-23 19:52 | 只看该作者
26# zxb1717 稳定性是设计出来的.就算他不出问题,你也要重新看一遍他程序设计

使用特权

评论回复
28
zxb1717|  楼主 | 2012-2-24 08:15 | 只看该作者
27# icecut
总体的程序设计肯定是看过了,而且重要的代码都细读之。

使用特权

评论回复
29
zxb1717|  楼主 | 2012-2-26 23:15 | 只看该作者
又想到一个问题,是不是中断函数写的太长也会导致程序跑飞??

使用特权

评论回复
30
zxb1717|  楼主 | 2012-2-28 12:06 | 只看该作者
程序已连续稳定运行三天了,感谢李大侠,以及各位给予帮助的高手,谢谢啦

使用特权

评论回复
31
zxb1717|  楼主 | 2012-2-29 21:28 | 只看该作者
又有新发现,这次发现是语法问题,我把函数贴上来,以下是库函数:
void   GPIOPinWrite(unsigned long ulPort, unsigned char ucPins, unsigned char ucVal)
{
    //
    // Check the arguments.
    //
    ASSERT(GPIOBaseValid(ulPort));
    //
    // Write the pins.
    //
    HWREG(ulPort + (GPIO_O_DATA + (ucPins << 2))) = ucVal;
}
其中ASSERT(GPIOBaseValid(ulPort));调用的GPIOBaseValid(ulPort))函数是有宏开关的,如下所示:
#ifdef DEBUG
static tBoolean
GPIOBaseValid(unsigned long ulPort)
{
    return((ulPort == GPIO_PORTA_BASE) || (ulPort == GPIO_PORTA_AHB_BASE) ||
           (ulPort == GPIO_PORTB_BASE) || (ulPort == GPIO_PORTB_AHB_BASE) ||
           (ulPort == GPIO_PORTC_BASE) || (ulPort == GPIO_PORTC_AHB_BASE) ||
           (ulPort == GPIO_PORTD_BASE) || (ulPort == GPIO_PORTD_AHB_BASE) ||
           (ulPort == GPIO_PORTE_BASE) || (ulPort == GPIO_PORTE_AHB_BASE) ||
           (ulPort == GPIO_PORTF_BASE) || (ulPort == GPIO_PORTF_AHB_BASE) ||
           (ulPort == GPIO_PORTG_BASE) || (ulPort == GPIO_PORTG_AHB_BASE) ||
           (ulPort == GPIO_PORTH_BASE) || (ulPort == GPIO_PORTH_AHB_BASE) ||
           (ulPort == GPIO_PORTJ_BASE) || (ulPort == GPIO_PORTJ_AHB_BASE));
}
#endif
找遍整个工程都没发现#define DEBUG这样的宏定义,所以这个函数是没有定义的,这样其他调用这个函数的函数就会存在隐患,尤其是一些GPIO函数,不知道我说的对不对,请高手指点,不知道大家在用M3的时候有没有遇到类似的问题。

使用特权

评论回复
32
李富贵| | 2012-2-29 22:39 | 只看该作者
你能进入调试状态,设置断点,那就是DEBUG模式,这个宏DEBUG是预先定义好了的。

你把你的工程切换到RELEASE模式这个DEBUG才不存在,但是在RELEASE模式下面只能全速运行不能调试。

使用特权

评论回复
33
zxb1717|  楼主 | 2012-3-1 08:18 | 只看该作者
李大侠的解释使我再一次的希望破灭啊

使用特权

评论回复
34
zxb1717|  楼主 | 2012-3-1 08:22 | 只看该作者
不知道李大侠所说的预先定义好是在什么地方定义的,我以前知道的是凡是像#ifdef XXXX,必须事先有#define  XXXX这样的宏的,为什么现在找不到呢

使用特权

评论回复
35
一览| | 2012-3-1 09:11 | 只看该作者
用IAR6.2版本吧

使用特权

评论回复
36
一览| | 2012-3-1 09:12 | 只看该作者
我的一个程序也是这样的,后来在IAR6.2版本就好了。

使用特权

评论回复
37
zxb1717|  楼主 | 2012-3-1 10:49 | 只看该作者
真的么,请问一览大侠哪有这个版本下载啊

使用特权

评论回复
38
zxb1717|  楼主 | 2012-3-1 10:53 | 只看该作者
我真的是不知道该怎么办了,该定位的都定位了,语法上不存在问题,堆栈溢出问题应该不存在,因为我打开STACK窗口调试的,没有相关警告,不知道还有什么方法,看来也只能试一下一览兄说的办法了

使用特权

评论回复
39
liu100149| | 2015-3-7 21:50 | 只看该作者
zxb1717 发表于 2012-2-23 14:54
李大侠,现在的优化等级是LOW,再低就是NONE了,手头没有MDK和GCC啊

解决没,我也出现这问题了。

使用特权

评论回复
40
liu100149| | 2015-3-7 22:03 | 只看该作者
zxb1717 发表于 2012-2-23 14:54
李大侠,现在的优化等级是LOW,再低就是NONE了,手头没有MDK和GCC啊

问题解了没,我也出现这个问题。

使用特权

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

本版积分规则