Nucleo-H743ZI2 性能问题

Nucleo-H743ZI2 performance issue

在我的各种 M4 和 M7 Nucleo 开发板上,我使用了一个普通的汇编器定时循环(一个 SUBS 和 BNE)以及一个闪烁的 LED。在 Cortex M4 上,这些指令消耗​​ 3 个处理器时钟,这一点很容易得到证实。在我的 Nucleo-H723ZG Cortex M7 板上,这两条指令总共只消耗一个时钟周期。这种性能改进归因于两条指令的双重发布,其中分支有效地具有零延迟。然而,对于我的 Nucleo-H743ZI2 板,循环指令采用两个处理器时钟而不是一个。由于这些都是使用相同代码的 M7 处理器,因此我需要帮助来理解为什么 Dual Fetching 似乎不起作用!

正如我在回复 时提到的,这些指令的循环计数是可变的,没有记录的方法来预测它将是什么。这将取决于程序的更广泛的上下文,尤其是指令的对齐方式、它们在缓存行中的位置以及与分支目标的距离等。

另外正如我已经提到的,如果你想让执行时间更可预测(但更糟),那么你必须在辅助控制寄存器中设置 DISFOLD 位。

我假设您正在尝试进行延迟循环,但是使用没有定义循环计数的指令来执行定时延迟是错误的。您需要使用某种时钟或计时器。

我在 STM32 上以非常高的准确性和非常低的开销成功使用了两个选项,SysTick 和调试周期计数器。它们都提供了一个寄存器,您可以重复读取并计算差异。

这里是 accurate delay functions on Cortex M.

的一些代码示例