【发布时间】:2017-06-07 00:21:57
【问题描述】:
到目前为止,我使用 3 个 NOP 来“清理”管道。 最近我遇到了为我做这件事的 ISB 指令。 查看 arm 信息中心,我注意到这个命令需要 4 个周期(在 Cortex M0 下),而 3 个 NOP 只需要 3 个。
我为什么要使用这个命令?它与 3 NOP 有什么不同?
【问题讨论】:
-
也许是为了优化尺寸?我不相信它对 Cortex M0 有任何真正的影响,单个
nop可能足以作为中断屏障。与处理器系列的其他成员的点兼容性,不需要依赖微妙的架构细节,当判断错误时可能会产生特别微妙的错误。我猜如果以前的外围存储需要额外的周期来传播和发出中断,那么额外的周期可能会很有用。 -
你无法预测未来内核的样子,3 nop 可能在今天的一个/一些内核上工作,但可能并非总是如此。执行此功能的指令在哪里,只要该指令得到支持,这是明智的解决方案。
-
我不需要预测。我知道它现在是如何工作的,这一切都很重要。经过一番研究,我发现没有人真正知道答案。我想我会保留 3 个 NOP 并保存一个周期。
-
@old_timer 我通常会删除 cortex-m3 标签,因为大多数 Q/A 并非仅针对 M3,而是适用于 M3/M4 和其他 cortex-M 内核。但是,我看到您添加了很多,我不想与您“战斗”。请参阅:ARM tag merging,优秀的元人以跑题而关闭。每个问题都应该有这两个标签吗?
-
我尝试制作单独的标签,但有人希望将其全部归入 cortex-m3 标签,所以我只是在关注。
标签: assembly arm cortex-m memory-barriers instructions