本帖最后由 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值被破坏了。待续```
|
|