ARM架构中HLT和WFI指令有什么区别?

4

我希望了解各种C状态,大部分CPU处于C1状态时进入HLT模式,在深度C状态(如c4)时会进入WFI模式。


“C”状态通常由ARM核外的某些东西处理。例如,Exynos ARM电源控制提供了一个示例。许多外设、时钟和电压都被排序以在不同的睡眠状态下最小化功耗。WFI用于CORE在所有睡眠状态下始终处于停止状态(等待中断)。其他SOC外设(将导致唤醒中断)是每种模式的不同的离线配置,超出了ARM核的范围。 - artless noise
2个回答

3

HLT用于JTAG,WFI和WFE通常用于常规裸机和用户程序

在ARMv8中,HLT是与调试相关的指令,即GDB用于实现硬件断点/监视点或JTAG使用的指令。

与其他指令一样,它在ARM参考手册中有文档:https://static.docs.arm.com/ddi0487/db/DDI0487D_b_armv8_arm.pdf

我不确定这个具体的指令是做什么的,但手册将其描述为C6.2.84“HLT”:

HLT停机指令。 HLT指令可以生成停机指令调试事件,导致进入调试状态。

第H2章“调试状态”描述了调试状态的含义:

在外部调试中,调试事件允许外部调试器停止PE。 PE然后进入调试状态。

而在更上面,我们看到“外部调试”意味着类似JTAG的调试方法。

因此,除非您正在实现此类调试相关功能,否则不要触摸HLT。

以下是最简单的裸机示例:

相关:arm sleep mode entry and exit differences WFE, WFI


-3
这个问题没有意义。你混淆了来自 ARM 和 x86 系统的术语。 HLT 指令存在于 x86 上;它在 ARM 上不存在。 WFI 是最接近的等效指令,并且同样只存在于 ARM 上。这两个指令在各自的体系结构上执行类似的任务。
C-states 再次是 x86 特定的术语。 ARM CPU 通常具有类似的睡眠状态,但它们通常由单个硬件制造商定义,而不是由 ARM 自身定义。

c states 是一个通用术语,在 ARM 中也使用,请参考 arch/arm/mach-msm/cpuidle.c 文件,并搜索 cstates 或 C-states。 你关于 HLT 指令的说法是正确的,但我仍然没有弄清楚两者之间的区别,因为在 x86 中,HLT 发生在 C1 状态,而在 ARM 中,WFI 发生在更深的状态,我想知道在这两个指令中等待时 CPU 的状态。我认为等待 HLT 必须比 WFI 更耗电,因为它发生在初始 C 状态。 - Saurabh Sengar
2
吹毛求疵:C状态是由ACPI定义的-更多的是桌面/服务器事物,因此绝大多数ACPI实现都是基于x86的,并且x86使用ACPI术语定义其电源管理功能。您通常不会在移动设备中看到ACPI,但它对于ARMv8服务器肯定正在发生。 - Notlikethat
1
ARMv8有一个HLT指令:https://developer.arm.com/documentation/100076/0100/a32-t32-instruction-set-reference/a32-and-t32-instructions/hlt - Błażej Michalik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接