看lpc1343的程序总是在while(1)里面会出现这样一个语句,不明所以然,只好到处找答案,记录如下。
无操作、设置事件、等待事件、等待中断和通知。
NOP{cond
}
SEV{cond
}
WFE{cond
}
WFI{cond
}
YIELD{cond
}
其中:
这些是提示指令。 是否实现这些指令是可选的。 只要其中任何一个指令未实现,则与 NOP
效果相同。
NOP
不执行任何操作。 在您的目标体系结构中,如果 NOP
没有作为特定指令实现,则汇编器将其视为伪指令,并生成不执行任何操作的另一条指令,例如 MOV r0, r0
(ARM) 或 MOV r8, r8
(Thumb)。
NOP
未必一定是消耗时间的 NOP
。 也许在该指令执行前,处理器就会将其从管道中删除。
您可以利用 NOP
进行填充,例如将后续指令置于 64 位边界上。
SEV
会导致向多处理器系统的所有内核发送事件信息。 如果实现了 SEV
,则还必须实现 WFE
。
如果未设置事件寄存器,则 WFE
会暂时中断挂起执行,直至发生任一以下事件后再恢复执行:
如果设置了事件寄存器,则 WFE
会清除该设置,然后立即返回。
如果实现了 WFE
,则还必须实现 SEV
。
WFI
会暂时将执行中断挂起,直至发生以下事件后再恢复执行:
YIELD
可告知硬件有线程正在执行任务,例如可换出的自旋锁。 硬件可使用此提示在多线程系统中暂挂并恢复执行线程。
这些 ARM 指令可用于 ARMv6K 及更高版本。
这些 32 位 Thumb 指令可用于 ARMv6T2 及更高版本。
这些 16 位 Thumb 指令可用于 ARMv6T2 及更高版本。
NOP
可在其他所有 ARM 和 Thumb 体系结构中用作伪指令。