首页 > 解决方案 > trace32 关联函数和数据跟踪时间戳

问题描述

使用 Trace32(目前处于仿真模式,但也将使用真实硬件)我正在运行一个演示程序。我想跟踪函数调用变量(数据跟踪),所以当我中断时,我运行以下命令:

trace.EXPORT.CSVFunc <funcfile>
PRINTER.FILE <varfile>
WinPrint.Trace.ListVar %hex var1 var2 var3

这给出了两个结果文件。第一个函数调用包含正时间戳(以 ns 分辨率)。第二个具有数据访问(读取和写入),但这包含负时间戳(分辨率为 100 ns)。到目前为止,我还没有找到为任何一个导出生成不同时间戳的任何方法,我也无法以任何方式关联时间。如果我假设我的最后一行的时间戳与 0 时间相同,我会从 得到正确的时间戳大小,但它们仍然相差太多。我从代码中知道某些写入更新位于特定函数进入/退出之间,因此我可以看到它已关闭。

其他人结合使用这两个出口?有没有其他方法可以获取使用转换为格式的“当前时间”,反之亦然?还是我使用了错误的出口?我还没有找到任何其他好的导出命令,但是有很多我可能会错过一个明显的命令。

标签: embeddedtrace32lauterbach

解决方案


Trace.EXPORT.CSVFunc始终导出每个函数条目的时间,并且自第一个跟踪记录以来以经过的纳秒形式存在。(因此对于 Trace.EXPORT.CSVFunc,第一条记录的时间戳始终为 0.ns)。

但是, Trace.ListVar窗口默认显示自上次读取或写入访问以来经过的时间。幸运的是,您可以通过选项 /List 指定希望在该窗口中包含哪些列。因此,以下命令显示的内容与普通 Trace.ListVar 窗口相同,但带有绝对时间戳:

Trace.ListVar /List Run Address CYcle Data Var %TimeFixed TIme.Zero 

在导出该数据之前,使用该命令将第一条​​记录的绝对时间戳设置为零,Trace.ZERO Trace.FIRST()您将拥有与 Trace.EXPORT.CSVFunc 相同类型的时间戳

放在一起:

Trace.ZERO Trace.FIRST()    
Trace.EXPORT.CSVFunc <funcfile>
PRinTer.FILE <varfile>
WinPrint.Trace.ListVar %Hex var1 var2 var3 /List Run Address CYcle Data Var %TimeFixed TIme.Zero 

也许您还想考虑一下命令Trace.EXPORT.Ascii,这是我个人最喜欢的。该导出命令的工作方式与Trace.List窗口几乎相同,但也支持过滤器。因此,例如要导出对您的三个变量的访问权限,您可以编写

Trace.EXPORT.Ascii <varfile> CYcle Address Data Var %TimeFixed TIme.Zero /FILTER Address var1 OR Address var2 OR Address var3   

推荐阅读