4

WFE 指令如何工作?我读到的是它使处理器等待 IRQ /FIQ/event/....

但是当你得到一个 IRQ 时会发生什么,irq_fault_handler 向量是否会在 WFE 执行后得到一个中断或指令时执行?

4

2 回答 2

8

WFE 在概念上等同于

while (!event_has_occurred) /*do nothing*/;

除了它关闭CPU而不是运行一个紧密的循环。

可以中断 WFE 的几件事,不仅包括中断,还包括来自另一个 CPU(在多核处理器中)的显式唤醒事件。

如果在 WFE 期间发生中断,则会发生通常的事情。处理器切换到 IRQ 或 FIQ 模式,跳转到 IRQ 或 FIQ 处理程序,WFE 指令的地址(加上通常的偏移量 8)放在lr.

如果 CPU 被显式唤醒事件唤醒,则执行 WFE 之后的下一条指令。

将 WFE 视为一个非常长的 NOP,仅在某些外部事件发生时才会完成。

于 2013-09-16T13:13:25.610 回答
1

还应该强调的是,WFE“只是”一个提示指令,即:兼容的实现可以将其视为 NOP 而不是进入睡眠状态。

因此,您几乎总是需要用一个循环来包围它。

以下答案提供了一个最小的裸机汇编示例,说明了 WFE 通常如何用于等待来自另一个 CPU 的事件:多核汇编语言是什么样的?

于 2019-11-19T14:17:30.567 回答