金牌会员
 
- 积分
- 1185
- 金钱
- 1185
- 注册时间
- 2015-9-18
- 在线时间
- 422 小时
|
发表于 2017-5-16 14:12:32
|
显示全部楼层
本帖最后由 liuchang 于 2017-5-16 14:14 编辑
额,今天推翻我之前的说法.
建议参考权威指南
额,R14等于0xffff fff1其实并非错误!!!
当处理器从异常返回的时候,R14是用来存储EXC_RETURN(在栈中会有额外4字节用来存储PC的值,也就是这里R14的作用).
既然LR在这里就是EXC_RETURN,那EXC_RETURN=0xfffffff1其实表示三层意思
1>这是CM3处理器,或者CM4处理器(未使能浮点单元或者不包含浮点单元),总之压栈只压8字节
2>返回后进入处理模式,也就是Handler模式
3>返回后使用主栈,而非线程栈
有人会问,为什么需要弄这个东西出来?
我们可以假设,处理器从异常返回后,其实它是很"迷茫的",我到底是进入线程模式,还是进入处理模式,我到底是使用主栈,还是使用线程栈,此时,这个EXC_RETURN,就显示出作用了(EXC_RETURN也就是exception return,顾名思义,这就是它的工作....)
至于你为什么进入handlerFault,这个锅,我觉得不应该让R14来背...
如果有说的不对的地方,还请各位指教...
|
|