2011-03-28 71 views
10

我正在阅读/了解ARM体系结构... 我想知道为什么有这么多模式 (FIQ,User,System,Supervisor,IRQ,...)。ARM模式,为什么有这么多?

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

在此先感谢。

回答

11

这只是一个架构决定。多种模式的一大优点是它们有一些存储库。这些额外的寄存器允许你写更多的不太复杂的异常例程。

如果你只选择两个,那么USR和SYS可能是最好的选择,但是当你发生异常时会发生什么?正常的ARM模型将进入异常模式,将解除异常模式的存储链接寄存器设置为在解决异常后指向想要返回的指令,将处理器状态保存在异常模式的SPSR寄存器中,然后跳转到异常向量。 USR和SYS共享他们的所有寄存器 - 使用这种模式,每当您进行中断时,您都会吹走您的函数返回地址(LR)!

特别是FIQ模式具有比其他异常模式更多的存储寄存器。这些额外的寄存器符合FIQ的“F”部分 - 它代表“快速”。不需要在软件中保存和恢复更多的处理器上下文会加快你的中断处理程序。

5

没有太多的补充卡尔的答案。不确定你正在讨论的ARM处理器的家族/架构,所以我只是假设你正在讨论关于ARM7/9/11的问题(FIQ,IRQ等)。我不会列举每种ARM体系结构变体中每种模式之间的差异。

除了什么卡尔说,对于不同情况不同模式的其他几个优点:

  • 例如,在FIQ,你不必分出向右走,你可以只是继续执行。除了其他例外,你必须马上分支

  • 不同的模式,你有自然支持单独的堆栈。如果您是多任务处理(例如RTOS),并且在处于中断模式时没有单独的堆栈,则必须在每个任务堆栈中为最坏情况的中断情形内置额外空间

  • 具有不同的模式,某些寄存器(例如CPSR,MMU寄存器等 - 取决于体系结构)是禁止的。与特定说明相同的东西。你不想让用户代码修改特权寄存器,现在呢?