打印

理解发生fault的原因

[复制链接]
2435|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 tianli1980 于 2012-3-13 21:27 编辑

在收集到所需的信息后,就要分析问题了,下面列出了导致fault的典型原因。

      MemManage  fault寄存器提供的信息


可能的原因
MSTKERR
入栈时发生错误(异常响应序列开始时)
1:堆栈指针的值被破坏;
2:堆栈容易过大,已经超出MPU允许的region范围。
MUNSTKERR
出栈时发生错误(异常响应序列终止时)。入栈时没有发生错误,出栈时却出错,总令人有些匪夷所思,可能的原因是:
1:异常服务例程破坏了椎栈指针;
2:异常服务例程更改了MPU配置。
DACCVIOL
内存访问保护违例。这是MPU发挥作用的体现。常常是用户应用程序企图访问特权级region所致
LACCVIOL
1:内存访问保护违例。常常是用户应用程序企图访问特权级 region。在这种情况下,入栈的PC给出的地址,就是产生问题的代码之所在。
2:跳转到不可执行指令的region.
3:异常返回时,使用了无效的EXC_RETURN值。
4:向量表中有无效的向量。例如,异常在向量建立就发生了,或者加载的是用于传统ARM内核的可执行映像。
5:在异常处理期间,入栈的PC值被破坏了。待续```

沙发
香水城| | 2012-3-14 14:50 | 只看该作者
不错。 但不知道为什么,我看到的是黑色的字在黑色的背景上,为了大家都能看到,帮LZ贴个图:

MemManage  fault寄存器提供的信息

MemManage _fault寄存器提供的信息.gif (46.69 KB )

MemManage _fault寄存器提供的信息.gif

使用特权

评论回复
板凳
tianli1980|  楼主 | 2012-3-14 17:52 | 只看该作者
谢谢版主给贴的图:sleepy:,不好意思。

使用特权

评论回复
地板
pkat| | 2012-3-14 18:14 | 只看该作者
分析的很好

使用特权

评论回复
5
火箭球迷| | 2012-3-14 18:23 | 只看该作者
LZ总结的很好,支持经验共享

使用特权

评论回复
6
sinadz| | 2012-3-14 21:39 | 只看该作者
很有用的资料,多谢共享

使用特权

评论回复
7
tianli1980|  楼主 | 2012-3-14 21:56 | 只看该作者
谢谢朋友们的支持,这只是MemManage fault状态寄存器提供情的信息,还有总线状态、用法状态、硬fault状态等等寄存器提供的信息,明天继续:)

使用特权

评论回复
8
aaa2742| | 2012-3-15 11:58 | 只看该作者
又能解决什么呢

使用特权

评论回复
9
拿起书本| | 2012-3-15 22:45 | 只看该作者
分析原因,对症下药。

使用特权

评论回复
10
logokfu| | 2012-3-16 09:30 | 只看该作者
学习一下

使用特权

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

本版积分规则

482

主题

2214

帖子

11

粉丝