程序进入FaultISR最后BFAR=0xE3000029

[复制链接]
8062|44
李富贵 发表于 2012-2-23 15:06 | 显示全部楼层
gcc我用过yagarto,还行,这是个免费软件。
http://www.yagarto.de/

mdk下载地址我发短消息给你。
 楼主| zxb1717 发表于 2012-2-23 15:37 | 显示全部楼层
李大侠真是好人,这么耐心详细从头到尾指导,能遇到你这样的一个上司就幸福了,感谢万分!
 楼主| zxb1717 发表于 2012-2-23 15:51 | 显示全部楼层
按指定的密码登录后,上面的文件下不了也打不开,不过还是十分感谢,我先用IAR调着,换了GCC或MDK万一又有新问题呢,呵呵。至少现在能定位错误的地址了,虽然还看不出什么,至少也向前走了一步,我自己再琢磨琢磨,有问题再向你及各位在线高手请教!
zljack213 发表于 2012-2-23 15:59 | 显示全部楼层
zljack213 发表于 2012-2-23 16:00 | 显示全部楼层
 楼主| zxb1717 发表于 2012-2-23 16:44 | 显示全部楼层
原来程序的中断函数中用了10个静态局部变量,自从把中断函数里面几个静态局部变量屏蔽了以后,这两天还没出过错,难道会跟这个有关??
icecut 发表于 2012-2-23 19:52 | 显示全部楼层
26# zxb1717 稳定性是设计出来的.就算他不出问题,你也要重新看一遍他程序设计
 楼主| zxb1717 发表于 2012-2-24 08:15 | 显示全部楼层
27# icecut
总体的程序设计肯定是看过了,而且重要的代码都细读之。
 楼主| zxb1717 发表于 2012-2-26 23:15 | 显示全部楼层
又想到一个问题,是不是中断函数写的太长也会导致程序跑飞??
 楼主| zxb1717 发表于 2012-2-28 12:06 | 显示全部楼层
程序已连续稳定运行三天了,感谢李大侠,以及各位给予帮助的高手,谢谢啦
 楼主| 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的时候有没有遇到类似的问题。
李富贵 发表于 2012-2-29 22:39 | 显示全部楼层
你能进入调试状态,设置断点,那就是DEBUG模式,这个宏DEBUG是预先定义好了的。

你把你的工程切换到RELEASE模式这个DEBUG才不存在,但是在RELEASE模式下面只能全速运行不能调试。
 楼主| zxb1717 发表于 2012-3-1 08:18 | 显示全部楼层
李大侠的解释使我再一次的希望破灭啊
 楼主| zxb1717 发表于 2012-3-1 08:22 | 显示全部楼层
不知道李大侠所说的预先定义好是在什么地方定义的,我以前知道的是凡是像#ifdef XXXX,必须事先有#define  XXXX这样的宏的,为什么现在找不到呢
一览 发表于 2012-3-1 09:11 | 显示全部楼层
用IAR6.2版本吧
一览 发表于 2012-3-1 09:12 | 显示全部楼层
我的一个程序也是这样的,后来在IAR6.2版本就好了。
 楼主| zxb1717 发表于 2012-3-1 10:49 | 显示全部楼层
真的么,请问一览大侠哪有这个版本下载啊
 楼主| zxb1717 发表于 2012-3-1 10:53 | 显示全部楼层
我真的是不知道该怎么办了,该定位的都定位了,语法上不存在问题,堆栈溢出问题应该不存在,因为我打开STACK窗口调试的,没有相关警告,不知道还有什么方法,看来也只能试一下一览兄说的办法了
liu100149 发表于 2015-3-7 21:50 | 显示全部楼层
zxb1717 发表于 2012-2-23 14:54
李大侠,现在的优化等级是LOW,再低就是NONE了,手头没有MDK和GCC啊

解决没,我也出现这问题了。
liu100149 发表于 2015-3-7 22:03 | 显示全部楼层
zxb1717 发表于 2012-2-23 14:54
李大侠,现在的优化等级是LOW,再低就是NONE了,手头没有MDK和GCC啊

问题解了没,我也出现这个问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部