程序进入FaultISR最新调试记录,请大家指点

[复制链接]
 楼主| zxb1717 发表于 2012-2-17 12:08 | 显示全部楼层 |阅读模式
以下是程序进入FaultISR时的断点图片,请大家帮忙看一下应该怎么追查程序进入FaultISR的原因?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| zxb1717 发表于 2012-2-17 12:26 | 显示全部楼层
有位朋友说PC指针保存着程序跳转前那一条语句的地址,但是如上面两幅图所示,第一幅图中
PC =0x0000CCDA,它所指向的语句已经在FaultISR里面了,是不是我哪里搞错了,请大家指点一下
 楼主| zxb1717 发表于 2012-2-17 14:37 | 显示全部楼层
自己顶一下,求大家帮忙看一下
icecut 发表于 2012-2-17 15:29 | 显示全部楼层
lr应该是跳进来前的地址...明显飞了
 楼主| zxb1717 发表于 2012-2-17 15:41 | 显示全部楼层
回复6楼,我知道跑飞了,所以想知道跑飞之前的那一句语句在哪,请大家继续指点。
 楼主| zxb1717 发表于 2012-2-18 10:16 | 显示全部楼层
类似遇到过相同情况的朋友给点意见,谢谢啦
suse-lj 发表于 2012-2-18 11:41 | 显示全部楼层
我用STM32也遇到过此等问题。结果我修改一下编译器的优化级别就搞定了。但究竟去原因我没有找出来
 楼主| zxb1717 发表于 2012-2-18 12:27 | 显示全部楼层
7楼的兄弟,能说说你怎么改的编译器优化级别啊,那我如果不是在线运行的,是烧进去运行的,还跟编译器有关么
 楼主| zxb1717 发表于 2012-2-18 12:37 | 显示全部楼层
问了一个弱弱的问题,以上问题自解,就是不知道怎么设置编译器优化级别
 楼主| zxb1717 发表于 2012-2-18 12:44 | 显示全部楼层
查看IAR使用手册后只到怎么设置编译器优化级别了,我设置的是LOW级别,再低就是NONE了,不知道7楼的兄弟是把优化级别提高还是降低,希望能告知一下,希望大家多给点意见。
icecut 发表于 2012-2-18 12:57 | 显示全部楼层
跑飞是没法追踪的...你只能看看堆栈里面有没有你想要的callstack
 楼主| zxb1717 发表于 2012-2-18 18:56 | 显示全部楼层
跑飞是没法追踪的...你只能看看堆栈里面有没有你想要的callstack
icecut 发表于 2012-2-18 12:57


我的程序都是在固定的操作以后才进入FaultISR()的,不是随机性跑飞的,另外在什么地方能看到
callstack?
 楼主| zxb1717 发表于 2012-2-18 19:00 | 显示全部楼层
另外补充一下,进入FaultISR()的那个操作一般都是在操作几十次以后才会使程序进入FaultISR(),所以奇怪为什么会这样,如果是没有使能要访问的外设,那应该每次都会进入啊,为什么要几十次操作以后才发生呢?有一次利用LR=SP+20,追踪到LR是落在定时器中断函数里面,是不是一定和定时器中断函数有关呢?请大家给点意见,谢谢啦
 楼主| zxb1717 发表于 2012-2-19 10:46 | 显示全部楼层
我看别人发的帖子说程序生成的map会有以下信息,主要是有关于CSTACK的数据,我用的是IAR6.1版本的,生成的MAP没有以下信息,那我该怎么找出以下相关信息呢,请IAR熟手指点一下,谢谢啦。
SEGMENT              SPACE    START ADDRESS   END ADDRESS     SIZE  TYPE  ALIGN
=======              =====    =============   ===========     ====  ====  =====
INTVEC               CODE          00000000 - 00000027          28   com    1
?FILL1               CODE          00000028 - 00000053          2C   rel    0
DIFUNCT              CODE          00000054 - 00000055           2   rel    0
CODE                 CODE          00000056 - 00000715         6C0   rel    1
INITTAB              CODE          00000716 - 00000721           C   rel    0
NEAR_ID              CODE          00000722 - 0000072D           C   rel    0
ABSOLUTE             DATA          0000003A - 0000003B           2   rel    0
                     DATA          00000052 - 00000053           2  
                     DATA          00000059 - 00000059           1  
                     DATA          0000005F - 0000005F           1  
CSTACK               DATA          00000060 - 000000C3          64   dse    0
NEAR_HEAP            DATA          000000C4 - 000000F5          32   dse    0
RSTACK               DATA          000000F6 - 00000159          64   dse    0
NEAR_I               DATA          0000015A - 00000165           C   rel    0
NEAR_Z               DATA          00000166 - 00000195          30   rel    0
EEPROM_I             XDATA         00000000 - 00000000           1   rel    0
李富贵 发表于 2012-2-19 11:19 | 显示全部楼层
 楼主| zxb1717 发表于 2012-2-19 11:43 | 显示全部楼层
谢谢15楼李大侠的详解,李大侠的方法主要是查看lr的值以及FAULT状态寄存器的值吧,其中lr的值我看过,能找到相关的函数,就是定时器1的中断函数,至于会在哪一句不一定,有点随机,所以现在不好定位,光从代码看没看出问题。关于FAULT状态寄存器的值我还没看过,这个是不是在调试的时候打开memory窗口,输入寄存器地址的值比如0xE000ED28就可以看到的吧,不一定要写以下代码的吧,我的理解对么?
printf ("BFAR = %x\n", (*((volatile unsigned long *)(0xE000ED38))));   

printf ("CFSR = %x\n", (*((volatile unsigned long *)(0xE000ED28))));   

printf ("HFSR = %x\n", (*((volatile unsigned long *)(0xE000ED2C))));   

printf ("DFSR = %x\n", (*((volatile unsigned long *)(0xE000ED30))));   

printf ("AFSR = %x\n", (*((volatile unsigned long *)(0xE000ED3C))));
 楼主| zxb1717 发表于 2012-2-19 14:29 | 显示全部楼层
请教icecut,能否详细指点一下“堆栈里面有没有你想要的callstack”怎么操作,第一次用IAR不熟,网上的IAR使用指南是简要版本的,只有25页,没看到这方面的介绍,还望再指明一下,谢谢!
李富贵 发表于 2012-2-19 16:53 | 显示全部楼层
根据你的现象应该是内存访问越界堆栈溢出一类的毛病。
 楼主| zxb1717 发表于 2012-2-19 17:07 | 显示全部楼层
再次感谢李大侠的指点,我现在初步也是这么怀疑的,所以我现在的问题是:第一,我怎么看到我的程序有关STACK的信息,我之前说过我的程序生成后的MAP没有相关STACK的信息;第二,如果我的程序堆栈溢出,那怎么修改IAR的stack设置。我的IAR是6.1版本,希望大家针对性的给点意见,谢谢李大侠,谢谢大家啦!
李富贵 发表于 2012-2-19 17:25 | 显示全部楼层
heap和stack都在icf文件里面设定,但是我怀疑stack设置没有用,因为未用RAM都是分配给CSTACK的,可能是链接的时候剩余空间低于icf文件规定值会出一个警告。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

231

帖子

1

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