ARM 中的 WFE 指令处理



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

但是,当您获得 IRQ 时会发生什么,irq_fault_handler向量是否会在获得中断或执行 WFE 之后的指令时执行?

WFE 在概念上等效

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

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

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

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

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

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

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

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

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

最新更新