ARM模式,为什么有这么多?

ARM模式,为什么有这么多?,arm,processor,mode,Arm,Processor,Mode,我目前正在阅读/学习ARM架构。。。 我想知道为什么会有这么多模式 (FIQ、用户、系统、主管、IRQ等) 我的问题是为什么我们需要这么多模式?仅仅用户和系统就足够了吗 提前感谢。这只是一个架构决定。多模式的最大优点是它们有一些存储寄存器。这些额外的寄存器允许您编写简单得多的异常例程 如果您只选择两个,那么USR和SYS可能是一个很好的选择,但是如果您选择了一个例外,会发生什么呢?正常的ARM模型是转到异常模式,将该异常模式的倾斜链接寄存器设置为指向解决异常后要返回的指令,将处理器状态保存在异常

我目前正在阅读/学习ARM架构。。。 我想知道为什么会有这么多模式 (FIQ、用户、系统、主管、IRQ等)

我的问题是为什么我们需要这么多模式?仅仅用户和系统就足够了吗


提前感谢。

这只是一个架构决定。多模式的最大优点是它们有一些存储寄存器。这些额外的寄存器允许您编写简单得多的异常例程

如果您只选择两个,那么USR和SYS可能是一个很好的选择,但是如果您选择了一个例外,会发生什么呢?正常的ARM模型是转到异常模式,将该异常模式的倾斜链接寄存器设置为指向解决异常后要返回的指令,将处理器状态保存在异常模式的SPSR寄存器中,然后跳转到异常向量。USR和SYS共享它们所有的寄存器——使用这个模型,每次中断时,您都会将函数返回地址(在LR中)吹走


特别是FIQ模式比其他异常模式具有更多的倾斜寄存器。这些额外的寄存器与FIQ的“F”部分保持一致——它代表“快速”。不必在软件中保存和恢复更多的处理器上下文将加快中断处理程序的速度。

卡尔的回答中没有太多补充。我不确定您所谈论的ARM处理器的家族/体系结构是什么,因此我将根据您的问题(FIQ、IRQ等)假设您所谈论的是ARM7/9/11。我不会列举每个ARM架构变体中每个模式之间的所有差异

除了Carl所说的,在不同的情况下使用不同的模式还有一些其他优势:

  • 例如,在FIQ中,您不必立即分支,您可以继续执行。除其他例外情况外,您必须立即分支

  • 使用不同的模式,可以自然地支持不同的堆栈。如果您正在进行多任务处理(例如RTO),并且在中断模式下没有单独的堆栈,则必须在每个任务堆栈上构建额外的空间,以应对最坏的中断情况

  • 对于不同的模式,某些寄存器(例如CPSR、MMU寄存器等,取决于体系结构)是禁止使用的。某些说明也是如此。您不想让用户代码修改特权寄存器,是吗