【问题标题】:Nucleo-H743ZI2 performance issueNucleo-H743ZI2 性能问题
【发布时间】:2021-09-24 14:21:55
【问题描述】:

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

【问题讨论】:

    标签: stm32


    【解决方案1】:

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

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

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

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

    这是accurate delay functions on Cortex M 的一些代码示例。

    【讨论】:

    • Tom,我没有解释我想要达到的目标!我不想建立一个准确的计时器我只是使用一种简单的方法来确认处理器时钟速度。我会给你一个“已回答”的勾号来关闭这个查询。答案是我未能正确读取我的时钟配置器并且向处理器输出了不正确的频率!
    • 谢谢!您可以通过将其中一个定时器直接连接到 HSI(内部 RC)谐振器来确认处理器速度,然后将该定时器与从核心时钟运行的定时器进行比较。过去,当我们有一个软件版本被编程到装有两种可能晶体之一的板上时,我曾使用过这种方法。
    猜你喜欢
    • 1970-01-01
    • 2021-08-19
    • 2017-04-13
    • 2022-01-04
    • 2010-09-05
    • 2012-09-25
    • 2015-05-28
    • 2015-06-20
    相关资源
    最近更新 更多