WFE指令如何工作? 我读过的是它让处理器等待IRQ / FIQ / event /....
但是当你得到一个IRQ时会发生什么,irq_fault_handler向量是在执行WFE后执行中断或指令时执行的?
答案 0 :(得分:4)
WFE在概念上等同于
while (!event_has_occurred) /*do nothing*/;
除了它关闭CPU而不是运行紧密循环。
可以interrupt a WFE的一些事情,不仅包括中断,还包括来自另一个CPU(在多核处理器中)的显式唤醒事件。
如果在WFE期间发生中断,通常会发生这种情况。处理器切换到IRQ或FIQ模式,跳转到IRQ或FIQ处理程序,WFE指令的地址(加上通常的偏移量8)放在lr
中。
如果CPU被显式唤醒事件唤醒,执行将继续执行WFE之后的下一条指令。
将WFE视为一个非常长的NOP,只有在发生某些外部事件时才会完成。
答案 1 :(得分:0)
还应该强调的是,WFE只是“一条提示”指令,即:兼容的实现可以将其视为NOP而不是睡觉。
因此,您几乎总是需要用循环将其包围。
以下答案提供了一个最小的裸机装配示例,该示例说明了通常如何使用WFE等待来自另一个CPU的事件:What does multicore assembly language look like?