WFE 指令如何工作?我读到的是它使处理器等待 IRQ /FIQ/event/....
但是当你得到一个 IRQ 时会发生什么,irq_fault_handler 向量是否会在 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 的事件:多核汇编语言是什么样的?