在ARM/THUMB状态之间切换

use*_*424 4 arm

当发生异常时,为什么ARM控制器应从THUMB状态返回到ARM状态?

unw*_*ind 6

一种解释可能是ARM模式是CPU的"本机"操作模式,并且在该模式下可以比在有限的Thumb模式下执行更多操作.据我所知,Thumb模式针对代码大小进行了优化,这可能意味着它缺少在异常处理中可能需要的某些指令.

此页面提到异常处理始终在ARM模式下完成.它没有提供任何理由,所以也许它只是它的设计方式.它确实讨论了从异常处理退出到正确(ARM或Thumb)模式的方法,因此只要您不自己编写异常处理程序,您就可以忽略此问题.当然,这假设您的系统设置了一个"默认"异常处理程序,它确实保留了执行模式.

另一方面,这个页面说明了这一点,关于Cortex-M3 ARM实现的中断向量:

每个异常向量的LSB指示是否要在Thumb状态下执行异常.

所以它似乎并不普遍,也许你可以在Thumb模式下运行你的特定异常.