WFI 一定会让处理器进入低功耗睡眠吗?
不会。官方语义把 WFI 定义为等待中断提示;实现可以暂停,也可以合法地把它当作 NOP 继续执行。
等待中断提示:实现可暂停 hart,直到可能需要处理中断;也可合法地不暂停并像 NOP 一样继续。
WFI 通知实现当前 hart 可暂停,直到可能需要处理中断。它是提示而不是低功耗保证:实现可以不暂停并把 WFI 当作 NOP 返回。若本地使能的中断已经挂起或之后挂起,WFI 可恢复,相关中断陷阱在后续指令边界发生。特权规范还定义了 mstatus.TW 对较低特权级 WFI 的限制:实现可在特定有界时间后触发非法指令异常,也可选择总是立即陷入。
展示 SYSTEM 固定编码、TW 限制,以及 WFI 可暂停也可像 NOP 返回的 ISA 可见语义。
该动画不承诺睡眠时长、功耗下降、唤醒延迟或调度策略;这些不是 WFI 的可移植 ISA 语义。
WFI 的重点是“等待提示”而不是“必然睡眠”。它没有显式操作数,编码固定;执行后可能暂停 hart,也可能马上像 NOP 一样继续。可移植软件必须在 WFI 返回后重新检查等待条件。
结合 «wfi # Wait for interrupt» 等实际代码理解该场景。
结合 «wfi # Wait for interrupt» 等实际代码理解该场景。
不会。官方语义把 WFI 定义为等待中断提示;实现可以暂停,也可以合法地把它当作 NOP 继续执行。
软件应重新检查等待条件或挂起状态,因为 WFI 可因任意原因恢复,恢复本身不保证目标事件已经完成处理。