理解发生fault的原因

[复制链接]
3506|9
 楼主| tianli1980 发表于 2012-3-13 20:28 | 显示全部楼层 |阅读模式
本帖最后由 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
 楼主| tianli1980 发表于 2012-3-14 17:52 | 显示全部楼层
谢谢版主给贴的图:sleepy:,不好意思。
pkat 发表于 2012-3-14 18:14 | 显示全部楼层
分析的很好
火箭球迷 发表于 2012-3-14 18:23 | 显示全部楼层
LZ总结的很好,支持经验共享
sinadz 发表于 2012-3-14 21:39 | 显示全部楼层
很有用的资料,多谢共享
 楼主| tianli1980 发表于 2012-3-14 21:56 | 显示全部楼层
谢谢朋友们的支持,这只是MemManage fault状态寄存器提供情的信息,还有总线状态、用法状态、硬fault状态等等寄存器提供的信息,明天继续:)
aaa2742 发表于 2012-3-15 11:58 | 显示全部楼层
又能解决什么呢
拿起书本 发表于 2012-3-15 22:45 | 显示全部楼层
分析原因,对症下药。
logokfu 发表于 2012-3-16 09:30 | 显示全部楼层
学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

482

主题

2214

帖子

11

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