我有一个嵌入式系统,其中包含我想要基准测试的代码。在这种情况下,有一行我想知道花费的时间(它是创建一个新对象,开始我们的应用程序的其余部分)。
我可以打开Trace-> Chart->符号,看看用光标选择区域的时间,但这很麻烦,不如我想的那么准确。我还发现了Perf->函数运行时,但我正在对新对象的赋值进行基准测试,而不是任何特定函数调用(new
在多个地方调用,而不仅仅是感兴趣的行)。
有没有办法用Trace32查看一行代码的实际时间?更进一步:是否有办法轻松地对两个断点之间的时间进行基准测试?
答案 0 :(得分:2)
使用RunTime
命令的solution by codehearts如果您没有实时跟踪就可以了。它适用于任何劳特巴赫工具和任何目标CPU。
然而如果你有实时跟踪(例如带有ETM和Lauterbach PowerTrace硬件的CPU),我建议改为使用命令Trace.STATistic.AddressDURation <start-addr> <end-addr>
。此命令将打开一个窗口,显示两个地址之间的平均时间。如果您多次在两个地址之间执行代码,则会获得最佳结果。
如果您使用的是ARM Cortex CPU,它支持周期精确的时序信息(通常是所有Cortex-A,Cortex-R和Cortex-M7),您可以通过使用设置{{1}来显着提高结果的准确性(和ETM.TImeMode.CycleAccurate
)。
如果您使用的是Lauterbach CombiProbe或uTrace(并且您无法使用ETM.CLOCK <core-frequency>
),我建议您设置ETM.TImeMode.CycleAccurate
。 (默认情况下,端口过滤器设置为PACK,允许记录更多数据和程序流,但时序精度稍差。)
答案 1 :(得分:0)
打开其他&gt;运行时窗口会显示自“laststart”以来的总时间。通过在代码块的第一行设置断点,在最后一行之后设置另一个断点,可以看到在“实际”列下从第一个断点到第二个断点的时间。