使用 Trace32 对代码运行时进行基准测试



我有一个嵌入式系统,其中包含我想对代码进行基准测试。在这种情况下,我想知道花费在一行上的时间(它是创建一个新对象来启动我们应用程序的其余部分)。

我能够打开跟踪>图表>符号并查看使用光标选择的区域所花费的时间,但这很麻烦,而且没有我想要的那么准确。我还发现了 Perf->Function 运行时,但我正在对新对象的分配进行基准测试,而不是任何特定函数调用(new在多个地方调用,而不仅仅是兴趣线)。

有没有办法使用 Trace32 查看一行代码上的实际时间?比单行更进一步:有没有办法轻松地对两个断点之间的时间进行基准测试?

codehearts 的解决方案使用RunTime命令,如果您没有实时跟踪,那就很好。它适用于任何劳特巴赫工具和任何目标CPU。

但是,如果您有实时跟踪(例如带有ETM和Lauterbach PowerTrace的CPU),我建议改用命令Trace.STATistic.AddressDURation <start-addr> <end-addr>。此命令将打开一个窗口,显示两个地址之间的平均时间。如果在两个地址之间多次执行代码,则可以获得最佳结果。

如果您使用的是支持周期精确计时信息的 ARM Cortex CPU(通常所有 Cortex-A、Cortex-R 和 Cortex-M7),则可以通过使用设置ETM.TImeMode.CycleAccurate(与ETM.CLOCK <core-frequency>一起)显著提高结果的准确性。

如果您使用的是 Lauterbach CombiProbe 或 uTrace(并且您不能使用ETM.TImeMode.CycleAccurate),我建议您Trace.PortFilter.ON设置。(默认情况下,端口过滤器设置为PACK,它允许记录更多的数据和程序流,但时序精度稍差。

打开 Misc->Runtime 窗口会显示自"laststart"以来所用的总时间。通过在代码块的第一行设置断点,在最后一行之后设置另一个断点,可以在"实际"列下查看从第一个断点到第二个断点所花费的时间。

相关内容

最新更新