Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ARM中的WFE指令处理_Arm - Fatal编程技术网

ARM中的WFE指令处理

ARM中的WFE指令处理,arm,Arm,WFE指令是如何工作的? 我读到的是,它使处理器等待IRQ/FIQ/event/ 但是当你得到一个IRQ时会发生什么呢?在WFE被执行之后,IRQ\u fault\u处理程序向量会在得到一个中断或指令时执行吗?WFE在概念上等同于 while (!event_has_occurred) /*do nothing*/; 除了它关闭CPU,而不是运行一个紧密的循环 有几件事情可能发生,不仅包括一个中断,还包括一个来自另一个CPU(在多核处理器中)的显式唤醒事件 如果在WFE期间发生中断,通常的事情

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


但是当你得到一个IRQ时会发生什么呢?在WFE被执行之后,IRQ\u fault\u处理程序向量会在得到一个中断或指令时执行吗?

WFE在概念上等同于

while (!event_has_occurred) /*do nothing*/;
除了它关闭CPU,而不是运行一个紧密的循环

有几件事情可能发生,不仅包括一个中断,还包括一个来自另一个CPU(在多核处理器中)的显式唤醒事件

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

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


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

还应强调的是,WFE“只是”一条提示指令,即:符合要求的实现可以将其视为NOP,而不是休眠

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


下面的答案提供了一个最小的裸机组装示例,说明了WFE通常如何用于等待来自另一个CPU的事件:

您也可以在执行
WFE
之前屏蔽中断,在这种情况下,将执行下一条指令。这是睡眠代码经常需要的。
WFE
将不会从外部SDRAM等获取数据,并将节省电源;许多设计使用此功能进入不同的睡眠状态。许多程序员会关心功耗;但这方面取决于SOC。从执行的角度来看,
WFE
就像一个扩展的
NOP
。(+1)好的。如果IRQ处理程序被定义为_IRQ:.word _IRQ,该怎么办。见SPL下BUILD@user970251我不知道你在问什么。WFE的行为不取决于源代码中如何定义IRQ处理程序。你在试图理解IRQ处理程序是做什么的吗?这是一个完全不同的问题,与WFE无关。我在这里要问的是,我引用的代码没有定义irq处理程序,在这种情况下会发生什么case@user970251该行不是将要使用的IRQ处理程序,它是一个占位符,直到IRQ处理程序的地址被放入中断向量。如果同时发生IRQ并且中断被解除阻塞,那么将调用临时处理程序,这是一个紧密循环(即,它什么也不做,永远或者直到电池耗尽)。如果你还是不明白;这与WFE无关。